{"version":3,"file":"main.6b9d189fe6d429d56de3.bundle.js","mappings":"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","sources":["webpack://web-pricing/./app/components/pricing-calculator-bulk/component.js","webpack://web-pricing/./app/components/pricing-calculator/component.js","webpack://web-pricing/./app/components/pricing-table/component.js","webpack://web-pricing/./app/components/pricing/component.js","webpack://web-pricing/./app/components/tooltip/component.js","webpack://web-pricing/./app/scripts/app.js","webpack://web-pricing/./app/scripts/services/angular-wetopi-pricing.js","webpack://web-pricing/./app/scripts/services/api.js","webpack://web-pricing/./app/components/pricing-calculator-bulk/index.html","webpack://web-pricing/./app/components/pricing-calculator/index.html","webpack://web-pricing/./app/components/pricing-table/index.html","webpack://web-pricing/./app/components/pricing/index.html","webpack://web-pricing/./app/components/tooltip/index.html"],"sourcesContent":["'use strict';\n\nimport './style.less';\n\nangular.module('webPricing')\n\n .component('pricingCalculatorBulk', {\n\n template: require('./index.html'),\n controllerAs: 'ctrl',\n\n controller: [\n '$scope',\n 'pricingModel',\n function ($scope, pricingModel) {\n\n let me = this;\n\n me.pricing = pricingModel;\n\n\n me.pricingBulk = {\n power: {\n value: 10\n },\n storage: {\n value: 10\n }\n };\n\n me.pricingBulk.storage.sliderOptions = {\n floor: 1,\n minLimit: 15,\n ceil: 900,\n showSelectionBar: true,\n translate: function (value) {\n return value + ' GB';\n }\n };\n\n\n me.pricingBulk.power.sliderOptions = {\n floor: 2,\n minLimit: 10,\n ceil: 300,\n step: 2,\n showSelectionBar: true,\n showTicksValues: false,\n translate: function (value) {\n return `${value / 2} server ${value} PU`;\n }\n };\n }]\n }).config(['$translateProvider', function ($translateProvider) {\n\n $translateProvider\n .translations('en', {\n 'PU (Power Units) is an...': '* PU (Power Units) is a measurement unit to let you combine different servers sizes with total freedom:'\n })\n .translations('es', {\n 'Agency Plan for multiple WordPress installs': 'Plan Agencia para múltiples instalaciones WordPress',\n 'Save money combining multiple Servers and Storage in a single plan.': 'Ahorra dinero al combinar múltiples servidores y almacenamiento en un único plan.',\n 'Up to': 'hasta',\n 'You can combine this': 'Podrás combinar tus',\n 'and': 'y',\n 'to run different server sizes': 'para tener distintos tamaños de servidor',\n 'PU (Power Units) is an...': '* PU (Power Units) es una unidad de medida para poder combinar con total libertad diferentes tamaños de servidores:',\n 'WordPress install in a': 'instalación WordPress en un'\n })\n .translations('ca', {\n 'Agency Plan for multiple WordPress installs': 'Pla Agència per a múltiples instal·lacions WordPress',\n 'Save money combining multiple Servers and Storage in a single plan.': 'Estalvia diners combinant múltiples servidors i emmagatzematge en un únic pla.',\n 'Up to': 'fins a',\n 'You can combine this': 'Podras combinar els',\n 'and': 'i',\n 'to run different server sizes': 'per tenir diferents tamanys de servidor',\n 'PU (Power Units) is an...': '* PU (Power Units) és una unitat de mesura per poder combinar amb total llibertat diferents mides de servidors:',\n 'WordPress install in a': 'instal·lació WordPress en un'\n });\n}]);\n\n","'use strict';\n\nimport './style.less';\n\nangular.module('webPricing')\n\n .component('pricingCalculator', {\n\n template: require('./index.html'),\n controllerAs: 'ctrl',\n\n controller: [\n '$scope',\n 'pricingModel',\n function ($scope, pricingModel) {\n\n let me = this;\n\n me.pricing = pricingModel;\n me.pricing.storage.sliderOptions = {\n minLimit: 1,\n floor: 1,\n ceil: 100,\n showSelectionBar: true,\n translate: function (value) {\n return value + ' GB';\n }\n };\n\n\n me.pricing.power.sliderOptions = {\n showTicksValues: true,\n translate: function (value) {\n return me.pricing.power.options[value].name;\n },\n stepsArray: [\n { value: '2', legend: me.pricing.power.options['2'].visits + ' visits' },\n { value: '3', legend: me.pricing.power.options['3'].visits + ' visits' },\n { value: '8', legend: me.pricing.power.options['8'].visits + ' visits' },\n { value: '16', legend: me.pricing.power.options['16'].visits + ' visits' }\n ]\n };\n }]\n }).config(['$translateProvider', function ($translateProvider) {\n\n $translateProvider\n .translations('es', {\n 'Production': 'Producción',\n 'Fine-tune your Single WordPress Install Plan': 'Ajusta el plan a la medida de tu web',\n 'If you run more than 2 WordPress sites, check our Agency Plan below.': 'Si tienes más de dos sitios WordPress, el Plan Agencia que tienes a continuación te puede interesar.'\n })\n .translations('ca', {\n 'Production': 'Producció',\n 'Fine-tune your Single WordPress Install Plan': 'Ajusta el pla a la mida de la teva web',\n 'If you run more than 2 WordPress sites, check our Agency Plan below.': 'Si tens més de dos llocs WordPress, el Plana Agència que hi ha a continuació et pot interessar.'\n });\n}]);\n\n\n","'use strict';\n\nimport './style.less';\n\nangular.module('webPricing')\n\n .component('pricingTable', {\n\n template: require('./index.html'),\n controllerAs: 'ctrl',\n\n controller: [\n 'scrollTo',\n 'pricingModel',\n function (scrollTo, pricingModel) {\n\n const MIN_STORAGE_ON_BULK_PLANS = 10;\n const MIN_PU_ON_BULK_PLANS = 10;\n\n let me = this;\n\n me.pricing = pricingModel;\n\n me.selected = {\n bulk: {\n pu: MIN_PU_ON_BULK_PLANS,\n storage: MIN_STORAGE_ON_BULK_PLANS\n },\n fixed: {\n storage: {\n small: 1,\n medium: 1,\n large: 1,\n xlarge: 1,\n xlmem1: 1\n }\n }\n }\n\n me.moreStorageFixedPlan = (type) => ++me.selected.fixed.storage[type];\n me.moreStorageBulkPlan = () => ++me.selected.bulk.storage;\n\n me.lessStorageFixedPlan = (type) => {\n if (me.selected.fixed.storage[type] <= 1) return;\n --me.selected.fixed.storage[type];\n }\n\n me.lessStorageBulkPlan = () => {\n if (me.selected.bulk.storage <= MIN_STORAGE_ON_BULK_PLANS) return;\n --me.selected.bulk.storage;\n }\n\n me.morePuBulkPlan = () => me.selected.bulk.pu = me.selected.bulk.pu + 2;\n me.lessPuBulkPlan = () => {\n if (me.selected.bulk.pu <= MIN_PU_ON_BULK_PLANS) return;\n me.selected.bulk.pu = me.selected.bulk.pu - 2;\n }\n\n\n /*\n let top = angular.element(document.getElementById(id));\n $document.scrollToElementAnimated(top, 20, 1000);\n */\n\n me.scrollTo = scrollTo;\n\n }]\n })\n .config(['$translateProvider', function ($translateProvider) {\n\n $translateProvider\n .translations('en', {\n '15 days': '15 days',\n '24/7 support...': '24/7 support is included in all our plans. Simply from your wetopi panel open the chat and speak directly with your usual tech interlocutor.',\n 'Agency': 'Agency',\n 'Backup preview...': 'You always restore backups on a new server.
If you like it, with a single click, it goes to production.',\n 'Backup retention...': 'Automatic and manual backups are stored for a minimum of 15 days.',\n 'Daily backups...': 'Your site will be automatically backed up each and every night.',\n 'Daily Malware scanner...': 'We scan every day your server files to identify malware or hacked sites.',\n 'Cloudflare Free CDN...': 'WordPress servers are ready to work with Cloudflare Free CDN, with Zero configs and no need for extra WordPress plugins.
Check the impressive results of wetopi.com at performance.sucuri.net',\n 'External WAF...': 'Your site gets double protected with dedicated WordPress WAF rules and by blacklisting feeds filtering non-legit traffic like blocking attacks, on-line service abuse, malware, botnets, command and control servers, and other cybercrime activities.',\n 'Free SSL certificates...': 'No need to renew costly SSL certificates. You have free one-click SSL with our Let’s Encrypt integration.',\n 'Free from Hack...': 'With our “Free from Hack” Guarantee, we are committed to solving any security problem free of charge and immediately.',\n 'From 100K': 'From 100K/mo',\n 'Manual backup...': 'Installing a new theme or plugin update?
Create a manual backup point first in case you need to undo the changes.',\n 'Migrating your sites...': 'Migrating your sites to us is free and completely effortless on your part. No downtime for your website. Try before going live and stay only if you like it.
More info about our process here',\n 'Multisite support...': 'All plans fully support multisite installations, along with subdirectory, subdomain, or domain mapping.',\n 'Multi-user panel...': 'All the sites you own and the ones you collaborate on are available to you in one easy-to-use dashboard panel.',\n 'PHP Engines...': 'Choose your prefered PHP engine: 5.6, 7.1, 7.3, 7.4, 8.0, 8.1, 8.2 or 8.3.
From your wetopi panel, on each of your servers, you can change from one version to another with a click of a button.',\n 'PHP workers per site...': 'PHP workers execute the code on your WordPress site. Additional PHP workers per site allow for multiple requests to execute simultaneously.',\n 'Recommended for ecommerce...': 'For performance reasons, we recommend running e-commerce and membership sites on Medium servers or bigger.',\n 'Redis...': 'Object caching with Redis can increase your WordPress site’s Page Generation speed when you have a database bottleneck or high user concurrency on dynamic pages.',\n 'Single-Sign-On...': 'You and your collaborators don’t have to deal with WordPress login details and passwords. Your wetopi session grants you access to all your WordPress admin backends.',\n 'Site cloning...': 'Clone or replicate a WordPress server infrastructure in seconds with a single click. Not just a simple copy of your site, you get a replica of your server.',\n 'SSH Access...': 'Access your server using Secure-Ftp or by SSH to the server’s command line, where you have tools like Git, Composer, and WP-CLI, among others.',\n 'Staging servers...': 'Staging included in all plans, even on FREE development.
When you manage a WordPres site, you get 3 server slots: 1 for your production and 2 additional servers you can use for your staging environment.',\n 'The auto-healing...': 'If your server goes down, the auto-healing assigns a new clean machine to your WordPress
You get INSTANT solution to server failures.',\n 'You can try...': 'You can try our services with peace of mind that if something goes wrong, you can get a full refund of your hosting fees within 30 days from the plan subscription.',\n 'You get a server...': 'You get a server with its own resources. If you make a balanced combination of plugins or enable caching you can surpass by far our suggested number of visits.
Development sites have restricted access but you get a shareable link to let anyone access the site.',\n 'You dont have to provision...': 'You don’t have to provision your WordPress server for future disk usage.
Increase and decrease 1GB by 1GB as you go.',\n 'When you backup...': 'When you backup, first of all, you get a super-fast snapshot without wasting server resources. From this snap, we make an in-house incremental we later, for maximum security, replicate to Amazon S3.',\n 'When you create a site...': 'When you create a site, you get 3 server slots.
1 for your production and 2 additional servers you can use for your staging environment, to test, to play, preview backups, ...',\n 'WordPress files...': 'WordPress files and databases are stored on cutting-edge Solid-State-Drive Storage. All our data is replicated 3 times.
In-house and external backups don\\'t take up space on your drive.',\n 'WordPress Installs...': 'You can run one WordPress site per server. All servers, production and staging, are designed to opperate with a single version of WordPress software.'\n })\n .translations('es', {\n '/cleanup': '/limpieza',\n '15 days': '15 días',\n '24/7 support': 'Soporte 24/7',\n '24/7 support...': 'El soporte 24/7 está incluido en todos nuestros planes. Simplemente desde tu panel wetopi abre el chat y habla directamente con tu interlocutor de siempre.',\n 'Agency': 'Agencia',\n 'Automatic daily backups': 'Backups diarios',\n '30-day money back guarantee': 'Garantía de devolución de 30 días',\n 'Backup preview': 'Vista previa de backups',\n 'Backup preview...': 'Siempre restauras tus backups en un servidor nuevo usando un dominio de desarrollo.
Si te gusta, con un simple clic lo publicas para que se vea con tu dominio producción.',\n 'Backup retention': 'Retención de backups',\n 'Cloudflare Free CDN...': 'Los servidores WordPress están listos para trabajar con Cloudflare Free CDN, con cero configuraciones y sin necesidad de Extensiones WordPress adicionales.
Comprueba los impresionantes resultados de wetopi.com en performance.sucuri.net',\n 'Daily backups...': 'Descansa tranquilamente, cada noche nos encargamos de hacer Copia de Seguridad de tu servidor.',\n 'Daily Malware scanner': 'Escaneo diario de malware',\n 'Daily Malware scanner...': 'Analizamos todos los días los archivos de tu servidor para identificar malware y vulnerabilidades.',\n 'Development': 'Desarrollo',\n 'External WAF': 'WAF Externo',\n 'External WAF...': 'Tu sitio web estará doblemente protegido. Primero por los cortafuegos de aplicación WAF redundantes, diseñados para filtrar tráfico específico WordPress y en segundo lugar mediante listas blacklisting externas, filtrando tráfico tal como ataques DDOs, on-line service abuse, malware, botnets, servidores command and control y variedad de actividades del ciber crimen.',\n 'Free': 'gratis',\n 'Free CDN': 'CDN gratis',\n 'Free from Hack': 'Libre de “Hackeos”',\n 'Free from Hack...': 'Con nuestra Garantía “Free from Hack”, nos comprometemos a resolver cualquier problema de seguridad de forma gratuita e inmediata.',\n 'Free SSL certificates': 'Certificados SSL Gratis',\n 'Free SSL certificates...': 'No es necesario emitir ni renovar los costosos certificados SSL. Tienes certificados SSL gratis, con un solo clic, con nuestra integración con Let’s Encrypt.',\n 'Free premium migrations': 'Migraciones premium gratuitas',\n 'From 100K': 'Desde 100K/mes',\n 'From 5.6 to 8.x': 'Desde 5.6 hasta 8.x',\n 'snap + in-house + external': 'snap + in-house + externos',\n 'Manual backup points': 'Puntos de backup manuales',\n 'Manual backup...': '¿Instalando un nuevo tema, extensión o actualización?
Con un simple clic crea un backup. Por si más tarde necesitas deshacer los cambios.',\n 'Migrating your sites...': 'Migrar tu web a wetopi es gratis y no comporta ningún esfuerzo por tu parte. Tu web no dejará de funcionar en ningún instante. Prueba cuanto necesites antes de publicar y solo quédate si te gusta.
Más información sobre nuestro proceso aquí',\n 'Monthly visits': 'Visitas mensuales',\n 'Multisite support...': 'Todos los planes son compatibles con WordPress Multisite, ya sea mediante la asignación de subdirectorios, subdominios o dominios.',\n 'Multi-user panel': 'Panel multiusuario',\n 'Multi-user panel...': 'Todos los sitios de tu propiedad y aquellos en los que colaboras están disponibles en un panel de control fácil de usar.',\n 'PHP Engines': 'Versiones de PHP',\n 'PHP Engines...': 'Elige el motor PHP que prefieras: 5.6, 7.1, 7.3, 7.4, 8.0, 8.1, 8.2 o 8.3
Desde tu panel de wetopi, en cada uno de tus servidores, puedes cambiar de una versión a otra con un clic de botón.',\n 'PHP workers per site': 'PHP workers por web',\n 'PHP workers per site...': 'Los workers de PHP se encargan de ejecutar el código de tu web WordPress. Tener workers PHP adicionales te permite ejecutar múltiples solicitudes simultáneamente.',\n 'Pricing Calculator': 'Calculadora de precios',\n 'Recommended for ecommerce/membership sites': 'Recomendado e-commerce/membresia',\n 'Recommended for ecommerce...': 'Por razones de rendimiento, recomendamos ejecutar webs de membresía y comercio electrónico en servidores Medium o más grandes.',\n 'Redis...': 'El almacenamiento caché de objetos con Redis puede aumentar la velocidad de generación de páginas de tu sitio de WordPress cuando tienes un cuello de botella en la base de datos o una alta concurrencia de usuarios en páginas dinámicas.',\n 'Replicated backups': 'Backups replicados',\n 'Restricted access': 'Acceso restringido',\n 'Self-healing technology': 'Tecnología Self-healing',\n 'Single-Sign-On...': 'Tú y tus colaboradores no tenéis que pelearos con los usuarios y las contraseñas de WordPress. Tu sesión de trabajo en wetopi te otorga acceso a todos tus WordPress admin.',\n 'Site cloning': 'Clonación de sites',\n 'Site cloning...': 'Clona y replica la infraestructura de tu servidor WordPress en segundos, con un solo clic. No se trata de una copia de tu WordPress dentro de tu server sino de una réplica exacta de todo el servidor.',\n 'Staging servers': 'Servidores Staging',\n 'Staging servers...': 'Staging incluido en todos los planes, incluso en los de desarrollo GRATUITOS.
Para cada sitio WordPress, dispones de 3 servidores: 1 para producción y 2 servidores adicionales que puedes utilizar para tus entornos de ensayo.',\n 'SSD storage': 'Almacenamiento SSD',\n 'SSH Access...': 'Accede a tu servidor utilizando Secure-Ftp o mediante SSH a la línea de comandos, donde tienes herramientas como Git, Composer y WP-CLI, entre otras.',\n 'Storage resize': 'Almacenamiento escalable',\n 'The auto-healing...': 'Si tu servidor deja de funcionar correctamente, el sistema robotizado de auto-healing asigna en pocos segundos una nueva máquina y emplazamiento dentro del cluster.
Es como resolver de forma INSTANTÁNEA los fallos de servidor.',\n 'Unlimited time': 'Tiempo ilimitado',\n 'Unlimited': 'Ilimitadas',\n 'up to': 'hasta',\n 'When you backup...': 'Al lanzar una copia de seguridad, en primer lugar, se genera un snapshot, una instantánea súper rápida sin desperdiciar recursos del servidor. A partir de este snap, hacemos un incremental interno que luego, para máxima seguridad, enviamos a Amazon S3.',\n 'When you create a site...': 'Al crear un site, dispones de 3 servidores:
1 para producción y 2 servidores adicionales que puedes utilizar como staging: para testar, probar backups, experimentar, etc.',\n 'WordPress files...': 'Los archivos y bases de datos de WordPress se almacenan en discos de estado sólido de última generación. Todos los datos se replican 3 veces.
Las copias de seguridad in-house y externas no ocupan espacio en tu disco.',\n 'Production Servers': 'Servidores Producción',\n 'You can try...': 'Puedes probar nuestros servicios con la tranquilidad de que si algo sale mal, cuentas con el reembolso completo de la tarifa de alojamiento dentro de los 30 días posteriores a la suscripción del plan.',\n 'You dont have to provision...': 'No es necesario que aprovisiones tu servidor WordPress para el uso futuro de espacio en disco.
Aumenta y disminuye de 1GB en 1GB a medida que avances.',\n 'You get a server...': 'Cada servidor tiene sus propios recursos. Si tu WordPress tiene una combinación equilibrada de extensiones o activas la caché, puedes superar con creces este número aproximado de visitas.
Los sites de desarrollo tienen acceso restringido, pero dispones de un enlace \"compartir\" para permitir que cualquiera pueda entrar.',\n 'WordPress Installs': 'Instalaciones WordPress',\n 'WordPress Installs...': 'Puedes ejecutar un WordPress por servidor. Todo servidor, sea de producción o staging, está diseñado para operar con una sola versión de software WordPress.'\n })\n .translations('ca', {\n '/cleanup': '/intervenció',\n '15 days': '15 dies',\n '24/7 support': 'Suport 24/7',\n '24/7 support...': 'El suport 24/7 està inclòs a tots els nostres plans. Simplement des del teu panell wetopi obre el xat i parla directament amb el teu interlocutor de sempre.',\n 'Agency': 'Agència',\n 'Automatic daily backups': 'Backups diàris',\n '30-day money back guarantee': 'Garantia de devolució de 30 dies',\n 'Cloudflare Free CDN...': 'Els servidors WordPress estan perparats per a treballar amb Cloudflare Free CDN, amb zero configuracions i sense Extensions WordPress addicionals.
Comprova els impressionants resultats de wetopi.com a performance.sucuri.net',\n 'Backup preview': 'Vista prèvia de backups',\n 'Backup preview...': 'Sempre restaures les teves còpies de seguretat en un servidor nou utilitzant un domini de desenvolupament.
Si t’agrada, amb un simple clic el publiques perquè es vegi amb el teu domini producció.',\n 'Backup retention': 'Retenció de backups',\n 'Pricing Calculator': 'Calculadora de preus',\n 'Daily backups...': 'Descansa tranquil·lament, cada nit ens encarreguem de fer Còpia de seguretat del teu servidor.',\n 'Daily Malware scanner': 'Escaneig diari de malware',\n 'Daily Malware scanner...': 'Analitzem tots els dies els arxius del teu servidor per a identificar malware i vulnerabilitats.',\n 'Development': 'Desenvolupament',\n 'External WAF': 'WAF Extern',\n 'External WAF...': 'El teu lloc web estarà doblement protegit. Primer pel tallafocs d’aplicació WAF redundants, dissenyat per a filtrar trànsit especific de WordPress i en segón lloc mitjançant filtres blacklisting amb llistes procedent de fonts externes, filtrant trànsit tal com atacs DDOs, en línia service abusi, malware, xarxes de zombis, servidors command and control i varietat d’activitats del ciber crim.',\n 'Free': 'gratis',\n 'Free CDN': 'CDN gratis',\n 'Free from Hack': 'Lliure de “Hackejos”',\n 'Free from Hack...': 'Amb la nostra Garantia “Free from Hack”, ens comprometem a resoldre qualsevol problema de seguretat de forma gratuïta i immediata.',\n 'Free SSL certificates': 'Certificats SSL Gratis',\n 'Free SSL certificates...': 'No és necessari emetre ni renovar els costosos certificats SSL. Tens certificats SSL gratis, amb un sol clic, amb la nostra integració amb Let’s Encrypt.',\n 'Free premium migrations': 'Migracions premium gratuites',\n 'From 100K': 'Des de 100K/mes',\n 'From 5.6 to 8.x': 'Des de 5.6 fins 8.x',\n 'snap + in-house + external': 'snap + in-house + externs',\n 'Manual backup points': 'Punts de backup manuals',\n 'Manual backup...': 'Instal·lant un nou tema, extensió o actualització?
Amb un simple clic crea una còpia de seguretat. Per si més tard necessites desfer els canvis.',\n 'Migrating your sites...': 'Migrar el teu web a wetopi és gratis i no comporta cap esforç per part teva. El teu web no deixarà de funcionar en cap instant. Prova tot el que calgui abans de prendre cap decisió. Queda’t si realment t’agrada.
Més informació sobre el nostre procés aquí',\n 'Monthly visits': 'Visites mensuals',\n 'Multisite support...': 'Tots els plans són compatibles amb WordPress Multisite, ja sigui mitjançant l’assignació de subdirectoris, subdominis o dominis.',\n 'Multi-user panel': 'Panell multiusuari',\n 'Multi-user panel...': 'Tots els llocs de la teva propietat i aquells en els quals col·labores estan disponibles en un panell de control fàcil d’usar.',\n 'PHP Engines': 'Versiones de PHP',\n 'PHP Engines...': 'Tria el motor PHP que prefereixis: 5.6, 7.1, 7.3, 7.4, 8.0, 8.1, 8.2 o 8.3
Des del teu panell de wetopi, en cadascun dels teus servidors, pots canviar d’una versió a una altra amb un clic de botó.',\n 'PHP workers per site': 'PHP workers per web',\n 'PHP workers per site...': 'Els workers de PHP s’encarreguen d’executar el codi del teu web WordPress. Tenir workers PHP addicionals et permet executar múltiples sol·licituds simultàniament.',\n 'Recommended for ecommerce/membership sites': 'Recomanat per a webs de e-commerce/membresia',\n 'Recommended for ecommerce...': 'Per raons de rendiment, recomanem executar webs de filiació i comerç electrònic en servidors Medium o més grans.',\n 'Redis...': 'L’emmagatzematge d’objectes amb Redis pot augmentar la velocitat de generació de pàgines del vostre lloc de WordPress quan teniu un coll d’ampolla a la base de dades o una alta concurrència d’usuaris en pàgines dinàmiques.',\n 'Replicated backups': 'Backups replicats',\n 'Restricted access': 'Accés restringit',\n 'Self-healing technology': 'Tecnologia Self-healing',\n 'Single-Sign-On...': 'Tu i els teus col·laboradors no heu de barallar-vos amb els usuaris i les contrasenyes de WordPress. La teva sessió de treball en wetopi t’atorga accés a tots els teus WordPress admin.',\n 'Site cloning': 'Clonació de sites',\n 'Site cloning...': 'Clona i replica la infraestructura del teu servidor WordPress en segons, amb un sol clic. No es tracta d’una còpia de la teva WordPress dins de la teva server sinó d’una rèplica exacta de tot el servidor.',\n 'SSD storage': 'Emmagatzematge SSD',\n 'SSH Access...': 'Accedeix al teu servidor mitjançant Secure-Ftp o per SSH a la línia de comandes, on disposes d\\'eines com Git, Composer i WP-CLI, entre altres.',\n 'Staging servers': 'Servidors Staging',\n 'Staging servers...': 'Staging inclòs a tots els Plans, fins i tot als de Desenvolupament GRATUÏTS.
Per a cada lloc WordPress, disposes de 3 servidors: 1 per a producció i 2 servidors addicionals que pots utilitzar per als teus entorns d’assaig.',\n 'Storage resize': 'Emmagatzematge escalable',\n 'The auto-healing...': 'Si el teu servidor deixa de funcionar correctament, el sistema robotitzat d’acte-healing assigna en pocs segons una nova màquina i emplaçament dins del clúster.
És com resoldre de forma INSTANTANEA les fallades de servidor.',\n 'Unlimited time': 'Temps il·limitat',\n 'Unlimited': 'Il·limitades',\n 'up to': 'fins a',\n 'When you backup...': 'En llançar una còpia de seguretat, en primer lloc, es genera un snapshot, una instantània súper ràpida sense malgastar recursos del servidor. A partir d’aquest snap, fem un incremental intern que després, per a màxima seguretat, enviem a Amazon S3.',\n 'When you create a site...': 'En crear un site, disposes de 3 servidors:
1 per a producció i 2 servidors addicionals que pots utilitzar com staging: per a testar, provar còpies de seguretat, experimentar, etc.',\n 'WordPress files...': 'Els arxius i bases de dades de WordPress s’emmagatzemen en discos d’estat sòlid d’última generació. Totes les dades es repliquen 3 vegades.
Les còpies de seguretat in-house i externes no ocupen espai al teu disc.',\n 'Production Servers': 'Servidors Producció',\n 'You can try...': 'Puedes probar nuestros servicios con la tranquilidad de que si algo sale mal, cuentas con el reembolso completo de la tarifa de alojamiento dentro de los 30 días posteriores a la suscripción del plan.',\n 'You dont have to provision...': 'No és necessari que aprovisionis el teu servidor WordPress per a l’ús futur d’espai en disc.
Augmenta i disminueix d’1GB en 1GB a mida que avancis.',\n 'You get a server...': 'Cada servidor té els seus propis recursos. Si el teu WordPress té una combinació equilibrada d’extensions o actives la cache, pots superar amb escreix aquest nombre aproximat de visites.
Els sites de desenvolupament tenen accés restringit, però disposes d’un enllaç \"compartir\" per a permetre que qualsevol pugui entrar.',\n 'WordPress Installs': 'Instal·lacions WordPress',\n 'WordPress Installs...': 'Pots executar un WordPress per servidor. Tot servidor, sigui de producció o staging, està dissenyat per operar amb una sola versió de programari WordPress.'\n });\n\n }])\n .factory('scrollTo', ['$document', function () {\n\n const box = angular.element('#scrollable-box');\n const table = angular.element('#scrollable-content');\n\n box.on('scroll', updateScrollButtons);\n angular.element(document).ready(updateScrollButtons);\n\n function updateScrollButtons() {\n\n let scrollLeft = box.scrollLeft();\n const maxScrollLeft = table.prop('offsetWidth') - box.prop('clientWidth');\n\n let btnLeft = angular.element('.btn-left');\n let btnRight = angular.element('.btn-right');\n\n btnLeft.prop('disabled', scrollLeft <= 0);\n btnRight.prop('disabled', scrollLeft >= maxScrollLeft);\n }\n\n\n return {\n 'left': function () {\n\n const width = Math.floor(table.prop('offsetWidth') / 8) - 6;\n\n\n let pos = box.scrollLeft();\n\n console.log(`pos: ${pos}, width: ${width}`)\n\n box.animate({\n scrollLeft: pos + width\n }, 1000, \"swing\"); // Duration and easing function\n\n updateScrollButtons(box, table); // Después de actualizar el scroll\n\n\n },\n\n 'right': function () {\n\n const width = Math.floor(table.prop('offsetWidth') / 8) - 6;\n\n let pos = box.scrollLeft();\n console.log(`pos: ${pos}, width: ${width}`)\n\n box.animate({\n scrollLeft: pos - width\n }, 500, \"swing\"); // Duration and easing function\n\n updateScrollButtons(box, table); // Después de actualizar el scroll\n }\n };\n }]);\n","'use strict';\n\nimport './style.less';\n\nangular.module('webPricing')\n\n .component('pricing', {\n template: require('./index.html'),\n });\n","'use strict';\n\nimport './style.less';\n\nangular.module('webPricing')\n\n .component('tooltip', {\n template: require('./index.html'),\n transclude: true,\n controllerAs: 'ctrl'\n });\n","'use strict';\n\n/**\n * @ngdoc overview\n * @name webPricing\n * @description\n * # webPricing\n *\n * Main module of the application.\n */\n\nrequire('angular');\nrequire('angular-animate');\nrequire('angular-resource');\nrequire('angular-translate');\nrequire('angularjs-slider');\n\nangular.module('webPricing', [\n 'ngAnimate',\n 'ngResource',\n 'rzModule',\n 'angular-wetopi-pricing',\n 'pascalprecht.translate'\n]).constant('config', (function () {\n\n // values for our different client url:\n var currentHostname = window.location.hostname.toLowerCase(),\n config = {\n API_HOST: currentHostname,\n API_PATH: '/api'\n };\n\n if (currentHostname.indexOf('localhost') === 0) {\n config.API_HOST = 'http://localhost:8080';\n }\n\n return config;\n\n})())\n .config([\n '$compileProvider',\n '$translateProvider',\n function ($compileProvider, $translateProvider) {\n\n // hide angularjs debug code:\n $compileProvider.debugInfoEnabled(false);\n $compileProvider.commentDirectivesEnabled(false);\n\n\n $translateProvider\n .useSanitizeValueStrategy(null)\n .fallbackLanguage('en');\n\n $translateProvider\n .translations('es', {\n '/hour': '/hora',\n '/mo': '/mes',\n 'visits': 'visitas',\n 'with': 'con',\n 'Staging': 'Staging',\n 'billed annually': 'factura anual',\n 'Prices listed above do not include tax.': 'Los precios arriba mostrados no incluyen impuestos.'\n\n })\n .translations('ca', {\n '/hour': '/hora',\n '/mo': '/mes',\n 'visits': 'visites',\n 'with': 'amb',\n 'Staging': 'Staging',\n 'billed annually': 'factura anual',\n 'Prices listed above do not include tax.': 'Els preus mostrats no inclouen impostos.'\n });\n }])\n .controller('MainCtrl', [\n '$scope',\n '$translate',\n function ($scope, $translate) {\n\n let me = this;\n\n $scope.$watch('me.language', function () {\n if (me.language.length > 0) {\n $translate.use(me.language);\n }\n });\n\n }]);\n\n\nrequire('./services/angular-wetopi-pricing');\nrequire('./services/api');\n\nrequire('../components/pricing/component');\nrequire('../components/pricing-calculator/component');\nrequire('../components/pricing-calculator-bulk/component');\nrequire('../components/pricing-table/component');\nrequire('../components/tooltip/component');\n","'use strict';\n\n/**\n * @ngdoc angular-wetopi-pricing.pricingModel service\n * @name pricingModel\n * @description\n * Site model interface\n */\nangular.module('angular-wetopi-pricing', [])\n\n .factory('pricingModel', [\n function () {\n\n const MONTS_TO_PAY_ON_ANUAL_PERIOD = 11;\n\n const HOURS_PER_MONTH = 730;\n\n const MIN_STORAGE_ON_BULK_PLANS = 10;\n const MAX_STORAGE_ON_BULK_PLANS = 900;\n\n // All rates in Cents:\n const MONTH_RATE_STORAGE_BASE = 110;\n const REDIS_OBJECT_CACHE_PLAN_MONTH_RATE = 1281;\n const REDIS_OBJECT_CACHE_PPU_HOUR_RATE = 2.7;\n\n const ECO_STOP_DISABLE_PLAN_MONTH_RATE = 308;\n const ECO_STOP_DISABLE_PPU_HOUR_RATE = 1.1;\n\n const PU_SMALL = 2;\n const PU_MEDIUM = 3;\n const PU_LARGE = 8;\n const PU_XLARGE = 16;\n const PU_XLARGE_MEM1 = 20;\n const PU_XLARGE_MEM2 = 24;\n const PU_XLARGE_MEM3 = 32;\n const PU_XLARGE_MEM4 = 40;\n const PU_XLARGE_CPU1 = 80;\n\n let storageOptions = {\n monthRate: MONTH_RATE_STORAGE_BASE\n };\n\n let powerOptions = {\n '2': {\n pu: PU_SMALL,\n cpu: '2',\n memory: '0.7GB',\n name: 'Small',\n visits: '20K',\n class: 1\n },\n '3': {\n pu: PU_MEDIUM,\n cpu: '3',\n memory: '1.5GB',\n name: 'Medium',\n visits: '40K',\n class: 1\n },\n '8': {\n pu: PU_LARGE,\n cpu: '8',\n memory: '2.5GB',\n name: 'Large',\n visits: '100K',\n class: 1\n },\n '16': {\n pu: PU_XLARGE,\n cpu: '16',\n memory: '3.5GB',\n name: 'X-Large',\n visits: '200K',\n class: 1\n },\n '20': {\n pu: PU_XLARGE_MEM1,\n cpu: '16',\n memory: '4.5GB',\n name: 'X-Large-Mem1',\n visits: '300K',\n class: 2\n },\n '24': {\n pu: PU_XLARGE_MEM2,\n cpu: '16',\n memory: '5.5GB',\n name: 'X-Large-Mem2',\n visits: '400K',\n class: 2\n },\n '32': {\n pu: PU_XLARGE_MEM3,\n cpu: '16',\n memory: '8.0GB',\n name: 'X-Large-Mem3',\n visits: '800K',\n class: 2\n },\n '40': {\n pu: PU_XLARGE_MEM4,\n cpu: '16',\n memory: '10.0GB',\n name: 'X-Large-Mem4',\n visits: '800K',\n class: 2\n },\n '80': {\n pu: PU_XLARGE_CPU1,\n cpu: '20',\n memory: '10.0GB',\n name: 'X-Large-Cpu1',\n visits: '1000K',\n class: 2\n }\n };\n\n\n function getBulkPlanRate({ pu, storage, redisCache, ecoStopDisable, periodicity }) {\n\n\n const bulkPlanMnthRate = [\n { fromPu: '0', toPu: '10', base: 0, next: 294 },\n { fromPu: '10', toPu: '25', base: 2910, next: 286 },\n { fromPu: '25', toPu: '45', base: 7200, next: 276 },\n { fromPu: '45', toPu: '70', base: 12720, next: 254 },\n { fromPu: '70', toPu: '90', base: 19070, next: 216 },\n { fromPu: '90', toPu: '120', base: 23390, next: 210 },\n { fromPu: '120', toPu: '999', base: 29690, next: 207 }\n ];\n\n\n const getBulkPlanPuMnthRate = pu => {\n\n if (pu <= 0) return 0;\n\n // eslint-disable-next-line no-unused-vars\n let { fromPu, toPu, base, next } = bulkPlanMnthRate.find(plan => pu <= plan.toPu)\n\n return base + next * (pu - fromPu)\n };\n\n\n let bulkPlanRate = getBulkPlanPuMnthRate(pu) +\n MONTH_RATE_STORAGE_BASE * storage +\n REDIS_OBJECT_CACHE_PLAN_MONTH_RATE * (parseInt(redisCache) || 0) +\n ECO_STOP_DISABLE_PLAN_MONTH_RATE * (parseInt(ecoStopDisable) || 0);\n\n if (periodicity === 'year') {\n bulkPlanRate *= MONTS_TO_PAY_ON_ANUAL_PERIOD;\n }\n\n return bulkPlanRate;\n }\n\n\n function ppuHourRateProcess(pu) {\n\n let puHourRateProcess;\n\n const PPU_XLARGE = 23.3;\n\n pu = pu >= 0 ? parseInt(pu) : PU_MEDIUM;\n\n switch (pu) {\n\n case 0:\n puHourRateProcess = 0;\n break;\n\n case PU_SMALL:\n puHourRateProcess = 1.981;\n break;\n\n case PU_MEDIUM:\n puHourRateProcess = 3.028;\n break;\n\n case PU_LARGE:\n puHourRateProcess = 8.386;\n break;\n\n case PU_XLARGE:\n case PU_XLARGE_MEM1:\n case PU_XLARGE_MEM2:\n case PU_XLARGE_MEM3:\n case PU_XLARGE_MEM4:\n case PU_XLARGE_CPU1:\n default:\n puHourRateProcess = Math.round(PPU_XLARGE * 1e3 / PU_XLARGE) * pu / 1e3;\n break;\n }\n\n return puHourRateProcess;\n }\n\n\n function ppuHourRateAddons({ redisCache = 0, ecoStopDisable = 0 }) {\n return (redisCache * REDIS_OBJECT_CACHE_PPU_HOUR_RATE + ecoStopDisable * ECO_STOP_DISABLE_PPU_HOUR_RATE);\n }\n\n\n function ppuHourRate({ storage, pu, redisCache = 0, ecoStopDisable = 0 }) {\n return getStorageHourRate(storage) + ppuHourRateProcess(pu) + ppuHourRateAddons({ redisCache, ecoStopDisable });\n }\n\n\n function getStorageHourRate(storage) {\n return getStorageMonthRate(storage) / HOURS_PER_MONTH;\n }\n\n\n function ppuMonthRate(plan) {\n return ppuHourRate(plan) * HOURS_PER_MONTH;\n }\n\n\n function sitePlanMonthRate({ storage, pu, redisCache = 0, ecoStopDisable = 0 }) {\n\n const MONTH_RATE_STORAGE_BASE = 150;\n const MONTH_RATE_XLARGE = 11911950 // cents * 1000\n\n let monthRate = 0;\n\n pu = pu >= 0 ? parseInt(pu) : PU_MEDIUM;\n\n switch (pu) {\n\n case PU_SMALL:\n monthRate += 1004;\n break;\n\n case PU_MEDIUM:\n monthRate += 1535;\n break;\n\n case PU_LARGE:\n monthRate += 4289;\n break;\n\n default:\n monthRate += Math.round(MONTH_RATE_XLARGE / PU_XLARGE) * pu / 1e3;\n break;\n\n }\n\n if (redisCache > 0) {\n monthRate += REDIS_OBJECT_CACHE_PLAN_MONTH_RATE;\n }\n\n if (ecoStopDisable > 0) {\n monthRate += ECO_STOP_DISABLE_PLAN_MONTH_RATE;\n }\n\n monthRate += Math.round(storage * MONTH_RATE_STORAGE_BASE * 1e3) / 1e3;\n\n\n return monthRate;\n\n }\n\n\n function sitePlanYearRate(plan) {\n return sitePlanMonthRate(plan) * MONTS_TO_PAY_ON_ANUAL_PERIOD;\n }\n\n\n function getStorageMonthRate(storage) {\n return storage * storageOptions.monthRate;\n }\n\n\n function bulkPlanMonthRate({ pu, storage, redisCache, ecoStopDisable }) {\n return getBulkPlanRate({ pu, storage, redisCache, ecoStopDisable, periodicity: 'month' });\n }\n\n function bulkPlanYearRate({ pu, storage, redisCache, ecoStopDisable }) {\n return getBulkPlanRate({ pu, storage, redisCache, ecoStopDisable, periodicity: 'year' });\n }\n\n\n /**\n * Estimate the amount of storage needed to run a selected amount of WPs with selected storage\n * @param planUnits\n * @param puPerWp\n * @param storagePerWp\n * @returns {number}\n */\n function bulkStorage(planUnits, puPerWp, storagePerWp) {\n return Math.min(MAX_STORAGE_ON_BULK_PLANS, Math.max(MIN_STORAGE_ON_BULK_PLANS, storagePerWp * bulkWpAmount(planUnits, puPerWp)));\n }\n\n /**\n * Estimate the amount of Wp we can run with selected power and given pu\n * @param planUnits\n * @param pu\n * @returns {number}\n */\n function bulkWpAmount(planUnits, pu) {\n return Math.floor(planUnits / powerOptions[pu].pu);\n }\n\n\n // replica from api/server/lib/helpers/date-tools.js\n function addMsecsToDate(msecs, JSONdate) {\n\n let JSONdateBase = (JSONdate || now()),\n date = new Date(Date.parse(JSONdateBase)),\n newDate = new Date(date.getTime() + msecs);\n\n return JSON.parse(JSON.stringify(newDate));\n\n }\n\n\n function msecsTo(JSONdate) {\n let nowMsecs = new Date().getTime(),\n toMsecs = Date.parse(JSONdate);\n\n return (toMsecs - nowMsecs);\n }\n\n\n function now() {\n return JSON.parse(JSON.stringify(new Date()));\n }\n\n\n function getNewRenewalAt(currentRenewalAt, currentAmount, newAmount) {\n let remaining = Math.max(0, msecsTo(currentRenewalAt));\n return addMsecsToDate(remaining * currentAmount / newAmount, now());\n }\n\n\n function printSitePlanMonthRate(plan) {\n return (sitePlanMonthRate(plan) / 100).toFixed(1);\n }\n\n\n return {\n\n storage: {\n value: 1,\n options: storageOptions\n },\n\n power: {\n value: '3',\n options: powerOptions,\n optionsArray: Object.values(powerOptions)\n },\n\n redisCache: {\n value: 0\n },\n\n ecoStopDisable: {\n value: 0\n },\n\n bulk: {},\n\n\n ppuHourRate,\n\n\n printPpuHourRate: plan => (ppuHourRate(plan) / 100).toFixed(3),\n\n\n printPpuMonthRate: plan => (ppuMonthRate(plan) / 100).toFixed(1),\n\n\n getStorageHourRate: storage => (getStorageHourRate(storage) / 100).toFixed(3),\n\n\n printSitePlanMonthRate,\n\n\n printSitePlanYearRate: plan => (sitePlanYearRate(plan) / 100).toFixed(0),\n\n\n printSitePlanYearMonthRate: plan => (printSitePlanMonthRate(plan) * MONTS_TO_PAY_ON_ANUAL_PERIOD / 12).toFixed(1),\n\n\n getNewSitePlanRenewalAt: function (currentRenewalAt, currentAmount, periodicity) {\n let newAmount;\n\n if (periodicity === 'month') {\n newAmount = sitePlanMonthRate({ pu: this.power.value, storage: this.storage.value, redisCache: this.redisCache.value, ecoStopDisable: this.ecoStopDisable.value });\n } else {\n newAmount = sitePlanYearRate({ pu: this.power.value, storage: this.storage.value, redisCache: this.redisCache.value, ecoStopDisable: this.ecoStopDisable.value });\n }\n\n return getNewRenewalAt(currentRenewalAt, currentAmount, newAmount);\n },\n\n\n getNewBulkPlanRenewalAt: function (currentRenewalAt, currentAmount, periodicity) {\n let newAmount = getBulkPlanRate({ pu: this.power.value, storage: this.storage.value, redisCache: this.redisCache.value, ecoStopDisable: this.ecoStopDisable.value, periodicity });\n\n return getNewRenewalAt(currentRenewalAt, currentAmount, newAmount);\n },\n\n\n bulkWpAmount,\n bulkStorage,\n\n\n printBulkPlanMonthRate: plan => (bulkPlanMonthRate(plan) / 100).toFixed(1),\n\n\n printBulkPlanWpMonthRate: ({ pu, storage, redisCache, ecoStopDisable }, wpPower) => {\n\n let wpAmount = bulkWpAmount(pu, wpPower);\n\n if (!wpAmount) return 0;\n\n return (bulkPlanMonthRate({ pu, storage, redisCache, ecoStopDisable }) / wpAmount / 100).toFixed(1)\n },\n\n\n setValuesBasedOnSite: function (site) {\n\n if (site.plan && site.plan.pu) {\n this.power.value = site.plan.pu;\n }\n\n if (site.plan && site.plan.redisCache) {\n this.redisCache.value = site.plan.redisCache;\n }\n\n if (site.plan && site.plan.ecoStopDisable) {\n this.ecoStopDisable.value = site.plan.ecoStopDisable;\n }\n\n let usedStorage = Math.max(1, site.stats.storageMax);\n\n if (usedStorage > this.storage.value) {\n this.storage.value = usedStorage;\n }\n\n if (site.subscription && site.subscription.plan.type === 'fixed') {\n this.storage.value = Math.max(usedStorage, site.subscription.plan.storage);\n }\n },\n\n\n setValuesBasedOnPlan: function (plan) {\n this.storage.value = plan.storage;\n this.power.value = plan.pu;\n this.redisCache.value = plan.redisCache || 0;\n this.ecoStopDisable.value = plan.ecoStopDisable || 0;\n },\n\n };\n }]);","'use strict';\n\n/**\n * @ngdoc api service\n * @name webPricing.api\n * @description\n * Api interface\n */\nangular.module('webPricing').\n\nfactory('api', [\n '$resource',\n 'config',\n function ($resource, config) {\n return $resource(config.API_HOST + config.API_PATH + '/:what/:id/:target/:targetId/:targetAction',\n {\n what: '@what', // @what forces to be dynamic and allways in url even on posts,\n id: '@id', // @id forces to be dynamic and allways in url even on posts\n target: '@target', // @target forces to be dynamic and allways in url even on posts\n targetId: '@targetId', // @targetId forces to be dynamic and allways in url even on posts\n targetAction: '@targetAction' // @targetAction forces to be dynamic and allways in url even on posts\n },\n {\n get: { method:'GET', isArray: false },\n post: { method:'POST', isArray: false },\n put: { method:'PUT', isArray: false },\n getPub: { method:'GET', isArray: false, skipAuthorization: true }, // public get\n postPub: { method:'POST', isArray: false, skipAuthorization: true } // public (do not need auth) posts\n });\n }]);\n\n","// Module\nvar code = \"
Save money combining multiple Servers and Storage in a single plan.
Up to {{ctrl.pricingBulk.power.value / 2}} Small servers with {{ ctrl.pricingBulk.storage.value }} GB Storage
You can combine this {{ctrl.pricingBulk.power.value }} PU* and {{ctrl.pricingBulk.storage.value }} GB to run different server sizes
PU (Power Units) is an...
1 Production {{ ctrl.pricing.power.options[ctrl.pricing.power.value].name }} Server with {{ ctrl.pricing.storage.value }} GB Storage
+ 2 Staging {{ ctrl.pricing.power.options[ctrl.pricing.power.value].name }} Servers with {{ ctrl.pricing.storage.value }} GB Storage
If you run more than 2 WordPress sites, check our Agency Plan below.
\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" DevelopmentFreeUnlimited time | Agency€ {{ ctrl.pricing.printBulkPlanMonthRate({ pu: ctrl.selected.bulk.pu, storage: ctrl.selected.bulk.storage }) }} /mo {{ ctrl.selected.bulk.pu / 2 }} serversup to € 5 /mo server | Small€ {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 2, storage: ctrl.selected.fixed.storage.small }) }} /mo billed annually€ {{ ctrl.pricing.printSitePlanMonthRate({ pu: 2, storage: ctrl.selected.fixed.storage.small }) }} /mo | Medium€ {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 3, storage: ctrl.selected.fixed.storage.medium }) }} /mo billed annually€ {{ ctrl.pricing.printSitePlanMonthRate({ pu: 3, storage: ctrl.selected.fixed.storage.medium }) }} /mo | Large€ {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 8, storage: ctrl.selected.fixed.storage.large }) }} /mo billed annually€ {{ ctrl.pricing.printSitePlanMonthRate({ pu: 8, storage: ctrl.selected.fixed.storage.large }) }} /mo | X-Large€ {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 16, storage: ctrl.selected.fixed.storage.xlarge }) }} /mo billed annually€ {{ ctrl.pricing.printSitePlanMonthRate({ pu: 16, storage: ctrl.selected.fixed.storage.xlarge }) }} /mo | X-Large Memory€ {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 20, storage: ctrl.selected.fixed.storage.xlmem1 }) }} /mo billed annually€ {{ ctrl.pricing.printSitePlanMonthRate({ pu: 20, storage: ctrl.selected.fixed.storage.xlmem1 }) }} /mo | |
---|---|---|---|---|---|---|---|
WordPress Installs | 1 | {{ctrl.selected.bulk.pu / 2}} installs | 1 | 1 | 1 | 1 | 1 |
Production Servers | 1 | {{ctrl.selected.bulk.pu / 2}} | 1 | 1 | 1 | 1 | 1 |
Staging servers | 2 | {{ctrl.selected.bulk.pu / 2}} | 2 | 2 | 2 | 2 | 2 |
Monthly visits | Restricted access | From 100K | 20K/mo | 40K/mo | 100K/mo | 200K/mo | 300K/mo |
SSD storage | 100 GB/server | {{ctrl.selected.bulk.storage}} GB/account | {{ctrl.selected.fixed.storage.small}} GB/server | {{ctrl.selected.fixed.storage.medium}} GB/server | {{ctrl.selected.fixed.storage.large}} GB/server | {{ctrl.selected.fixed.storage.xlarge}} GB/server | {{ctrl.selected.fixed.storage.xlmem1}} GB/server |
Storage resize | Free | € {{ ctrl.pricing.printBulkPlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB | € {{ ctrl.pricing.printSitePlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB | € {{ ctrl.pricing.printSitePlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB | € {{ ctrl.pricing.printSitePlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB | € {{ ctrl.pricing.printSitePlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB | € {{ ctrl.pricing.printSitePlanMonthRate({ pu: 0, storage: 1 }) }} /mo GB |
Free CDN | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
30-day money back guarantee | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Free premium migrations | 1 | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited |
Self-healing technology | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
WordPress Multisite | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Development Free | Agency {{ctrl.selected.bulk.storage}}GB € {{ ctrl.pricing.printBulkPlanMonthRate({ pu: ctrl.selected.bulk.pu, storage: ctrl.selected.bulk.storage }) }} /mo {{ ctrl.selected.bulk.pu / 2 }} servers | Small {{ctrl.selected.fixed.storage.small}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 2, storage: ctrl.selected.fixed.storage.small }) }} /mo billed annually | Medium {{ctrl.selected.fixed.storage.medium}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 3, storage: ctrl.selected.fixed.storage.medium }) }} /mo billed annually | Large {{ctrl.selected.fixed.storage.large}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 8, storage: ctrl.selected.fixed.storage.large }) }} /mo billed annually | X-Large {{ctrl.selected.fixed.storage.xlarge}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 16, storage: ctrl.selected.fixed.storage.xlarge }) }} /mo billed annually | X-Large Memory {{ctrl.selected.fixed.storage.xlmem1}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 20, storage: ctrl.selected.fixed.storage.xlmem1 }) }} /mo billed annually | |
Automatic daily backups | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Replicated backups | snap + in-house + external | snap + in-house + external | snap + in-house + external | snap + in-house + external | snap + in-house + external | snap + in-house + external | snap + in-house + external |
Manual backup points | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Backup retention | 15 days | 15 days | 15 days | 15 days | 15 days | 15 days | 15 days |
Backup preview | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
24/7 support | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Daily Malware scanner | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
External WAF | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Free from Hack | € 100 /cleanup | ✔ | € 100 /cleanup | ✔ | ✔ | ✔ | ✔ |
Development Free | Agency {{ctrl.selected.bulk.storage}}GB € {{ ctrl.pricing.printBulkPlanMonthRate({ pu: ctrl.selected.bulk.pu, storage: ctrl.selected.bulk.storage }) }} /mo {{ ctrl.selected.bulk.pu / 2 }} servers | Small {{ctrl.selected.fixed.storage.small}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 2, storage: ctrl.selected.fixed.storage.small }) }} /mo billed annually | Medium {{ctrl.selected.fixed.storage.medium}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 3, storage: ctrl.selected.fixed.storage.medium }) }} /mo billed annually | Large {{ctrl.selected.fixed.storage.large}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 8, storage: ctrl.selected.fixed.storage.large }) }} /mo billed annually | X-Large {{ctrl.selected.fixed.storage.xlarge}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 16, storage: ctrl.selected.fixed.storage.xlarge }) }} /mo billed annually | X-Large {{ctrl.selected.fixed.storage.xlmem1}}GB € {{ ctrl.pricing.printSitePlanYearMonthRate({ pu: 20, storage: ctrl.selected.fixed.storage.xlmem1 }) }} /mo billed annually | |
Multi-user panel | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
WordPress Single-Sign-On | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
SSH / SFTP Access | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
PHP Engines | From 5.6 to 8.x | From 5.6 to 8.x | From 5.6 to 8.x | From 5.6 to 8.x | From 5.6 to 8.x | From 5.6 to 8.x | |
Free SSL certificates | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
PHP workers per site | 5~10 | 5~40 | 5 | 10 | 20 | 30 | 40 |
Recommended for ecommerce/membership sites | ✔ | ✔ | ✘ | ✔ | ✔ | ✔ | ✔ |
Site cloning | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Redis Object Cache | - | € 12.46 /mo | - | € 12.46 /mo | € 12.46 /mo | € 12.46 /mo | € 12.46 /mo |
Prices listed above do not include tax.