This commit is contained in:
User A0264400
2026-04-19 17:13:54 +03:00
parent c19df05b57
commit 75fa754dba
192 changed files with 39819 additions and 0 deletions

View File

@@ -1,3 +1,42 @@
# BEGIN WpFastestCache
# Modified Time: 19-04-26 17:08:48
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^dostavka-vodi-krim.ru
# Start WPFC Exclude
# End WPFC Exclude
# Start_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP:Cookie} !wordpress_logged_in_[^\=]+\=gp-admin
# End_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP_HOST} ^dostavka-vodi-krim.ru
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit|WP_FASTEST_CACHE_CSS_VALIDATOR|Twitterbot|LinkedInBot|WhatsApp|Mediatoolkitbot)
RewriteCond %{HTTP_USER_AGENT} !(WP\sFastest\sCache\sPreload(\siPhone\sMobile)?\s*Bot)
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_URI} !(\/){2,}
RewriteCond %{THE_REQUEST} !(\/){2,}
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{QUERY_STRING} !.+ [OR]
RewriteCond %{QUERY_STRING} fbclid=
RewriteCond %{HTTP:Cookie} !comment_author_
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/all/$1/index.html -f [or]
RewriteCond /home/a0264400/domains/dostavka-vodi-krim.ru/public_html/wp-content/cache/all/$1/index.html -f
RewriteRule ^(.*) "/wp-content/cache/all/$1/index.html" [L]
</IfModule>
<FilesMatch "index\.(html|htm)$">
AddDefaultCharset UTF-8
<ifModule mod_headers.c>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Mon, 29 Oct 1923 20:30:00 GMT"
</ifModule>
</FilesMatch>
# END WpFastestCache
# BEGIN HTTPS + WWW REDIRECT
<IfModule mod_rewrite.c>
RewriteEngine On

862
wp-content/cache/all/index.html vendored Normal file
View File

@@ -0,0 +1,862 @@
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<!-- This site is optimized with the Yoast SEO plugin v27.2 - https://yoast.com/product/yoast-seo-wordpress/ -->
<title>Доставка воды в Севастополе — заказать воду на дом и в офис</title>
<meta name="description" content="Закажите питьевую воду 19 литров с доставкой по Севастополю: дом, офис, кафе. Быстрое подтверждение, удобные интервалы, возврат тары." />
<link rel="canonical" href="https://dostavka-vodi-krim.ru/" />
<meta property="og:locale" content="ru_RU" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Доставка воды в Севастополе — заказать воду на дом и в офис" />
<meta property="og:description" content="Закажите питьевую воду 19 литров с доставкой по Севастополю: дом, офис, кафе. Быстрое подтверждение, удобные интервалы, возврат тары." />
<meta property="og:url" content="https://dostavka-vodi-krim.ru/" />
<meta property="og:site_name" content="Доставка воды по Крыму" />
<meta property="article:modified_time" content="2026-04-05T19:33:02+00:00" />
<meta name="twitter:card" content="summary_large_image" />
<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://dostavka-vodi-krim.ru/","url":"https://dostavka-vodi-krim.ru/","name":"Доставка воды в Севастополе — заказать воду на дом и в офис","isPartOf":{"@id":"https://dostavka-vodi-krim.ru/#website"},"about":{"@id":"https://dostavka-vodi-krim.ru/#organization"},"datePublished":"2026-04-01T20:31:22+00:00","dateModified":"2026-04-05T19:33:02+00:00","description":"Закажите питьевую воду 19 литров с доставкой по Севастополю: дом, офис, кафе. Быстрое подтверждение, удобные интервалы, возврат тары.","breadcrumb":{"@id":"https://dostavka-vodi-krim.ru/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https://dostavka-vodi-krim.ru/"]}]},{"@type":"BreadcrumbList","@id":"https://dostavka-vodi-krim.ru/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Главная страница"}]},{"@type":"WebSite","@id":"https://dostavka-vodi-krim.ru/#website","url":"https://dostavka-vodi-krim.ru/","name":"Доставка воды по Крыму","description":"Доставка бутилированной воды в офис и на дом в Севастополе и по Крыму","publisher":{"@id":"https://dostavka-vodi-krim.ru/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://dostavka-vodi-krim.ru/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":"Organization","@id":"https://dostavka-vodi-krim.ru/#organization","name":"Доставка воды по Крыму","url":"https://dostavka-vodi-krim.ru/","logo":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https://dostavka-vodi-krim.ru/#/schema/logo/image/","url":"http://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/logo.png","contentUrl":"http://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/logo.png","width":2000,"height":2000,"caption":"Доставка воды по Крыму"},"image":{"@id":"https://dostavka-vodi-krim.ru/#/schema/logo/image/"}}]}</script>
<!-- / Yoast SEO plugin. -->
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Доставка воды по Крыму &raquo; Лента" href="https://dostavka-vodi-krim.ru/feed/" />
<link rel="alternate" type="application/rss+xml" title="Доставка воды по Крыму &raquo; Лента комментариев" href="https://dostavka-vodi-krim.ru/comments/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://dostavka-vodi-krim.ru/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdostavka-vodi-krim.ru%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://dostavka-vodi-krim.ru/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdostavka-vodi-krim.ru%2F&#038;format=xml" />
<style id='wp-img-auto-sizes-contain-inline-css'>
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id='wp-emoji-styles-inline-css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<link rel='stylesheet' id='woocommerce-blocktheme-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/12t7svwq/bgsuq.css' media='all' />
<link rel='stylesheet' id='woocommerce-layout-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/fpqkr0nb/bgsuq.css' media='all' />
<link rel='stylesheet' id='woocommerce-smallscreen-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/1c8bqbl0/bgsuq.css' media='only screen and (max-width: 768px)' />
<link rel='stylesheet' id='woocommerce-general-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/knet2smk/bgsuq.css' media='all' />
<style id='woocommerce-inline-inline-css'>
.woocommerce form .form-row .required { visibility: visible; }
/*# sourceURL=woocommerce-inline-inline-css */
</style>
<link rel='stylesheet' id='twentytwentyfour-test1-fonts-css' href='https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&#038;display=swap' media='all' />
<link rel='stylesheet' id='twentytwentyfour-test1-style-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/dk28zm1/bgsuq.css' media='all' />
<script src="https://dostavka-vodi-krim.ru/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script src="https://dostavka-vodi-krim.ru/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.5.3" id="wc-jquery-blockui-js" defer data-wp-strategy="defer"></script>
<script id="wc-add-to-cart-js-extra">
var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043e\u0440\u0437\u0438\u043d\u044b","cart_url":"https://dostavka-vodi-krim.ru/cart/","is_cart":"","cart_redirect_after_add":"no"};
//# sourceURL=wc-add-to-cart-js-extra
</script>
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.5.3" id="wc-add-to-cart-js" defer data-wp-strategy="defer"></script>
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.5.3" id="wc-js-cookie-js" defer data-wp-strategy="defer"></script>
<script id="woocommerce-js-extra">
var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c","i18n_password_hide":"\u0421\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c"};
//# sourceURL=woocommerce-js-extra
</script>
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.5.3" id="woocommerce-js" defer data-wp-strategy="defer"></script>
<link rel="https://api.w.org/" href="https://dostavka-vodi-krim.ru/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://dostavka-vodi-krim.ru/wp-json/wp/v2/pages/573" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dostavka-vodi-krim.ru/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.9.4" />
<meta name="generator" content="WooCommerce 10.5.3" />
<link rel='shortlink' href='https://dostavka-vodi-krim.ru/' />
<meta name="yandex-verification" content="a1a821485b8cd61e" />
<meta name="google-site-verification" content="yLBKEJNyeeSlYRiQDo7XdnbGshajal_zHUtUjnEVBkk" />
<script>document.createElement( "picture" );if(!window.HTMLPictureElement && document.addEventListener) {window.addEventListener("DOMContentLoaded", function() {var s = document.createElement("script");s.src = "https://dostavka-vodi-krim.ru/wp-content/plugins/robin-image-optimizer/libs/addons/assets/js/picturefill.min.js";document.body.appendChild(s);});}</script> <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
<style class='wp-fonts-local'>
@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:fallback;src:url('https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/fonts/inter/Inter-VariableFont_slnt,wght.woff2') format('woff2');font-stretch:normal;}
@font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url('https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_normal_400.woff2') format('woff2');}
@font-face{font-family:Cardo;font-style:italic;font-weight:400;font-display:fallback;src:url('https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_italic_400.woff2') format('woff2');}
@font-face{font-family:Cardo;font-style:normal;font-weight:700;font-display:fallback;src:url('https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_normal_700.woff2') format('woff2');}
</style>
<style id="uagb-style-frontend-573">.uag-blocks-common-selector{z-index:var(--z-index-desktop) !important}@media (max-width: 976px){.uag-blocks-common-selector{z-index:var(--z-index-tablet) !important}}@media (max-width: 767px){.uag-blocks-common-selector{z-index:var(--z-index-mobile) !important}}
</style><link rel="icon" href="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/cropped-logo-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/cropped-logo-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/cropped-logo-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/cropped-logo-1-270x270.png" />
</head>
<body class="home wp-singular page-template-default page page-id-573 wp-custom-logo wp-embed-responsive wp-theme-twentytwentyfour test1-landing-page theme-twentytwentyfour woocommerce-uses-block-theme woocommerce-block-theme-has-button-styles woocommerce-no-js">
<header class="site-header">
<div class="container">
<div class="header-row">
<a class="brand" href="https://dostavka-vodi-krim.ru/" aria-label="Перейти на главную страницу">
<span class="brand-mark" aria-hidden="true">
<!-- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C9 6.1 6 9.4 6 13.2C6 16.9 8.69 20 12 20C15.31 20 18 16.9 18 13.2C18 9.4 15 6.1 12 2Z" fill="currentColor"/>
</svg> -->
<img src="https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/images/logo.png" alt="">
</span>
<span class="brand-text">
<strong>АкваЛиния</strong>
<span>доставка воды в Севастополе</span>
</span>
</a>
<nav class="nav" aria-label="Основная навигация">
<a href="https://dostavka-vodi-krim.ru/shop/">Каталог</a>
<a class="" href="https://dostavka-vodi-krim.ru/blog/">Блог</a>
<a href="https://dostavka-vodi-krim.ru/delivery/">Доставка</a>
<a href="https://dostavka-vodi-krim.ru/service/">Для дома и офиса</a>
<a href="https://dostavka-vodi-krim.ru/faq/">FAQ</a>
<a href="https://dostavka-vodi-krim.ru/contacts/">Контакты</a>
</nav>
<div class="header-actions">
<a class="header-phone" href="tel:+79117748923">
<span aria-hidden="true">+7 (911) 774-89-23</span>
</a>
<a class="cart-button" href="https://dostavka-vodi-krim.ru/cart/" aria-label="Перейти в корзину">
<span aria-hidden="true">Корзина</span>
<span class="cart-count" aria-live="polite" aria-atomic="true">0</span>
</a>
<button class="mobile-toggle" id="mobileToggle" aria-label="Открыть меню" aria-expanded="false" aria-controls="mobilePanel">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="M4 7H20" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
<path d="M4 12H20" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
<path d="M4 17H20" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
</button>
</div>
</div>
<div class="mobile-panel" id="mobilePanel">
<div class="mobile-card">
<nav class="mobile-nav" aria-label="Мобильная навигация">
<a href="https://dostavka-vodi-krim.ru/#catalog">Каталог</a>
<a href="https://dostavka-vodi-krim.ru/blog/">Блог</a>
<a href="https://dostavka-vodi-krim.ru/delivery/">Условия доставки</a>
<a href="https://dostavka-vodi-krim.ru/service/">Для дома и офиса</a>
<a href="https://dostavka-vodi-krim.ru/faq/">FAQ</a>
<a href="https://dostavka-vodi-krim.ru/contacts/">Контакты</a>
</nav>
<a class="header-phone" href="tel:+79117748923">+7 (911) 774-89-23</a>
<a class="cart-button" href="https://dostavka-vodi-krim.ru/cart/" aria-label="Перейти в корзину с мобильного меню">
<span>Корзина</span>
<span class="cart-count" aria-live="polite" aria-atomic="true">0</span>
</a>
</div>
</div>
</div>
</header>
<main id="top">
<section class="hero">
<div class="container">
<div class="hero-grid">
<div class="hero-copy reveal">
<span class="eyebrow">Чистая вода каждый день</span>
<h1 class="hero-title">Питьевая вода с доставкой в <span>Севастополе</span> — привезём в удобное время</h1>
<div class="hero-actions">
<button class="button" data-open-order aria-label="Открыть форму заказа воды">Заказать воду</button>
<a class="ghost-button" href="#catalog" aria-label="Перейти к каталогу воды">Посмотреть каталог</a>
</div>
<div class="hero-stats">
<div class="stat-card reveal reveal-delay-1">
<strong>от 290 ₽</strong>
<span>Бутыль 19 л для дома и офиса</span>
</div>
<div class="stat-card reveal reveal-delay-2">
<strong>2 часа</strong>
<span>среднее время доставки по городу в будни</span>
</div>
<div class="stat-card reveal reveal-delay-3">
<strong>7 дней</strong>
<span>работаем без выходных для дома и офиса</span>
</div>
</div>
</div>
<aside class="hero-panel reveal reveal-delay-1" aria-label="Информация о доставке">
<div class="panel-top">
<div>
<span class="signal-pill">Сегодня работаем по городу</span>
<h2>Сегодня в доставке: центральные и прибрежные районы</h2>
</div>
<div class="chip">бутыли 19 л</div>
</div>
<div class="hero-notes">
<div class="hero-note">
<strong>Для дома</strong>
<span>Удобные форматы для кухни и семьи, без лишней тяжести и походов в магазин.</span>
</div>
<div class="hero-note">
<strong>Для офиса</strong>
<span>Регулярные поставки, документы для бухгалтерии и запас воды без авралов.</span>
</div>
</div>
</aside>
</div>
<div class="ticker reveal reveal-delay-2" aria-label="Ключевые преимущества сервиса">
<div class="ticker-item">
<strong>Источник</strong>
<span>артезианская вода с многоступенчатым контролем</span>
</div>
<div class="ticker-item">
<strong>Сервис</strong>
<span>подъем на этаж и помощь с заменой бутыли</span>
</div>
<div class="ticker-item">
<strong>Оплата</strong>
<span>наличные, карта, перевод и безнал для компаний</span>
</div>
<div class="ticker-item">
<strong>Автодоставка</strong>
<span>гибкий график без повторных звонков</span>
</div>
</div>
</div>
</section>
<section class="section" id="catalog">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Каталог</span>
<h2 class="section-title">Выберите формат воды</h2>
</div>
<p class="section-copy">В каталоге — популярные объемы для дома и офиса: от небольших бутылей до стандартных 19 литров.
Можно заказать разово или подключить регулярную доставку, чтобы не следить за остатками.</p>
</div>
<div class="catalog-grid">
<article class="catalog-card reveal">
<div class="catalog-media"><img width="200" height="300" src="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1-200x300.webp" class="catalog-product-image" alt="" decoding="async" fetchpriority="high" srcset="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1-200x300.webp 200w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1-683x1024.webp 683w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1-768x1152.webp 768w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1-600x900.webp 600w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/04/Набор-15л-1.webp 1024w" sizes="(max-width: 200px) 100vw, 200px" /></div>
<h3>Набор 1,5л</h3>
<p></p>
<div class="tag-row">
<span class="chip">Товар</span>
<span class="chip">в наличии</span>
</div>
<div class="card-price"><strong>120&nbsp;&#8381;</strong></div>
<a
class="mini-button add_to_cart_button product_type_simple"
href="/?add-to-cart=581"
data-product_id="581"
data-quantity="1"
rel="nofollow"
aria-label="Добавить в корзину: Набор 1,5л"
>В корзину</a>
</article>
<article class="catalog-card reveal reveal-delay-1">
<div class="catalog-media"><img width="200" height="300" src="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа-200x300.webp" class="catalog-product-image" alt="" decoding="async" srcset="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа-200x300.webp 200w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа-683x1024.webp 683w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа-768x1152.webp 768w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа-600x900.webp 600w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/куллер-помпа.webp 1024w" sizes="(max-width: 200px) 100vw, 200px" /></div>
<h3>Кулер + помпа</h3>
<p></p>
<div class="tag-row">
<span class="chip">Товар</span>
<span class="chip">в наличии</span>
</div>
<div class="card-price"><strong>1050&nbsp;&#8381;</strong></div>
<a
class="mini-button add_to_cart_button product_type_simple"
href="/?add-to-cart=437"
data-product_id="437"
data-quantity="1"
rel="nofollow"
aria-label="Добавить в корзину: Кулер + помпа"
>В корзину</a>
</article>
<article class="catalog-card reveal reveal-delay-2">
<div class="catalog-media"><img width="200" height="300" src="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л-200x300.webp" class="catalog-product-image" alt="" decoding="async" srcset="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л-200x300.webp 200w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л-683x1024.webp 683w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л-768x1152.webp 768w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л-600x900.webp 600w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-5л.webp 1024w" sizes="(max-width: 200px) 100vw, 200px" /></div>
<h3>Вода 5 литров</h3>
<p></p>
<div class="tag-row">
<span class="chip">Товар</span>
<span class="chip">в наличии</span>
</div>
<div class="card-price"><strong>99&nbsp;&#8381;</strong></div>
<a
class="mini-button add_to_cart_button product_type_simple"
href="/?add-to-cart=436"
data-product_id="436"
data-quantity="1"
rel="nofollow"
aria-label="Добавить в корзину: Вода 5 литров"
>В корзину</a>
</article>
<article class="catalog-card reveal reveal-delay-3">
<div class="catalog-media"><img width="200" height="300" src="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л-200x300.webp" class="catalog-product-image" alt="Аквалиния 19л" decoding="async" srcset="https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л-200x300.webp 200w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л-683x1024.webp 683w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л-768x1152.webp 768w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л-600x900.webp 600w, https://dostavka-vodi-krim.ru/wp-content/uploads/2026/03/Аквалиния-19л.webp 1024w" sizes="(max-width: 200px) 100vw, 200px" /></div>
<h3>Вода 19 литров</h3>
<p></p>
<div class="tag-row">
<span class="chip">Товар</span>
<span class="chip">в наличии</span>
</div>
<div class="card-price"><strong>390&nbsp;&#8381;</strong></div>
<a
class="mini-button add_to_cart_button product_type_simple"
href="/?add-to-cart=426"
data-product_id="426"
data-quantity="1"
rel="nofollow"
aria-label="Добавить в корзину: Вода 19 литров"
>В корзину</a>
</article>
</div>
</div>
</section>
<section class="section" id="bestsellers">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Бестселлеры</span>
<h2 class="section-title">Что заказывают чаще всего</h2>
</div>
<p class="section-copy">Если заказывают впервые, чаще всего начинают с бутыли 19 литров. Для дома, поездок или редкого использования обычно добавляют компактные форматы.</p>
</div>
<div class="featured-grid">
<div class="glass-card reveal">
<span class="eyebrow">Хит по Севастополю</span>
<h3>Вода 19 л — то, что чаще всего берут на постоянку</h3>
<p>Хороший вариант на каждый день: для дома, офиса и мест, где вода нужна постоянно. Удобно ставить в кулер и не вспоминать о запасах каждый день.</p>
<div class="product-table">
<div class="product-row">
<div>
<strong>АкваЛиния Классик</strong>
<span>19 л, мягкий вкус, ежедневное потребление</span>
</div>
<div class="price">290 ₽</div>
<a class="mini-button" href="https://dostavka-vodi-krim.ru/shop/">В каталог</a>
</div>
<div class="product-row">
<div>
<strong>АкваЛиния Премиум</strong>
<span>19 л, артезианская вода, усиленный контроль</span>
</div>
<div class="price">340 ₽</div>
<a class="mini-button" href="https://dostavka-vodi-krim.ru/shop/">В каталог</a>
</div>
<div class="product-row">
<div>
<strong>Стартовый комплект</strong>
<span>2 бутыли 19 л + помпа для первого заказа</span>
</div>
<div class="price">690 ₽</div>
<a class="mini-button" href="https://dostavka-vodi-krim.ru/shop/">В каталог</a>
</div>
</div>
</div>
<div class="glass-card reveal reveal-delay-1">
<span class="eyebrow">Почему выбирают</span>
<h3>Почему этот формат выбирают на постоянной основе</h3>
<div class="chip-row chip-row-spaced">
<span class="chip">быстрая доставка</span>
<span class="chip">чистая бутыль</span>
<span class="chip">возврат тары</span>
<span class="chip">выгодно для офиса</span>
</div>
<p>Многие берут воду по графику, чтобы не вспоминать о заказе в последний момент. Это удобно и для семьи, и для офиса, где запас должен быть всегда под рукой.</p>
<div class="hero-actions hero-actions-spaced">
<button class="button" data-open-order>Заказать воду</button>
</div>
</div>
</div>
</div>
</section>
<section class="section" id="delivery">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Условия доставки</span>
<h2 class="section-title">Доставка воды по районам Севастополя</h2>
</div>
<p class="section-copy">Работаем по основным районам Севастополя. При оформлении заказа подскажем ближайшее окно и заранее подтвердим удобное время доставки.</p>
</div>
<div class="delivery-grid">
<div class="glass-card reveal">
<h3>Что важно знать перед заказом</h3>
<div class="product-table">
<div class="product-row">
<div>
<strong>Зоны доставки</strong>
<span>Гагаринский, Ленинский, Нахимовский, Балаклава, Камышовая бухта, Остряки, Стрелецкая</span>
</div>
</div>
<div class="product-row">
<div>
<strong>Время доставки</strong>
<span>Ежедневно с 8:00 до 21:00, срочные окна по возможности в день обращения</span>
</div>
</div>
<div class="product-row">
<div>
<strong>Минимальный заказ</strong>
<span>От 1 бутыли 19 л или от 500 ₽ для малых форматов</span>
</div>
</div>
<div class="product-row">
<div>
<strong>Возвратная тара</strong>
<span>Пустые бутыли забираем при следующей доставке или при отдельном выезде по согласованию</span>
</div>
</div>
</div>
</div>
<div class="delivery-map reveal reveal-delay-1" aria-label="Информация о маршрутах доставки">
<span class="eyebrow eyebrow-inverse">Активные маршруты</span>
<h3 class="section-heading-compact section-heading-delivery">Доставляем по всем районам города</h3>
<div class="zones">
<span class="zone-card">Гагаринский район</span>
<span class="zone-card">Ленинский район</span>
<span class="zone-card">Нахимовский район</span>
<span class="zone-card">Балаклава</span>
</div>
<div class="delivery-highlights">
<article class="delivery-highlight-card">
<strong>Ближайшее окно</strong>
<span>Подберём ближайший доступный интервал и заранее согласуем время.</span>
</article>
<article class="delivery-highlight-card">
<strong>Быстрое подтверждение</strong>
<span>Связываемся в течение 15 минут в рабочее время.</span>
</article>
<article class="delivery-highlight-card">
<strong>Сервис на месте</strong>
<span>Подъем воды, замена бутыли и вывоз пустой тары по запросу.</span>
</article>
<button class="button delivery-cta" data-open-order>Оставить заявку на доставку</button>
</div>
</div>
</div>
</div>
</section>
<section class="section" id="how-order">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Как заказать</span>
<h2 class="section-title">Четыре быстрых шага до чистой воды</h2>
</div>
<p class="section-copy">Все просто: выбираете воду, оставляете заявку, а мы уточняем детали и привозим заказ в согласованное время.</p>
</div>
<div class="steps-grid">
<article class="step-card reveal">
<div class="step-number">1</div>
<h3>Выберите объем воды </h3>
<p>Определите нужный объем: вода 19 литров, 5 литров, малые бутылки, минеральная или газированная вода.</p>
</article>
<article class="step-card reveal reveal-delay-1">
<div class="step-number">2</div>
<h3>Оставьте заявку на сайте или по телефону</h3>
<p>Соберите заказ прямо на сайте и проверьте итоговую сумму до подтверждения.</p>
</article>
<article class="step-card reveal reveal-delay-2">
<div class="step-number">3</div>
<h3>Подтвердите удобное время доставки</h3>
<p>Оставьте телефон и адрес в Севастополе, а мы уточним время и детали по таре.</p>
</article>
<article class="step-card reveal reveal-delay-3">
<div class="step-number">4</div>
<h3>Получите воду с доставкой до двери</h3>
<p>Курьер привезет воду, поможет с выгрузкой и при необходимости заберет пустые бутыли.</p>
</article>
</div>
</div>
</section>
<section class="section" id="business">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Для дома и офиса</span>
<h2 class="section-title">Для дома и офиса — без лишних сложностей</h2>
</div>
<p class="section-copy">У домашних и корпоративных заказов разные задачи, поэтому мы отдельно продумали условия для семьи и для компаний.</p>
</div>
<div class="segments-grid">
<article class="segment-card reveal">
<span class="eyebrow">Доставка воды на дом</span>
<h3>Когда воду удобно заказывать домой</h3>
<p>Такой формат выбирают семьи, пожилые клиенты и все, кто не хочет носить тяжелые бутыли из магазина.</p>
<ul class="segment-list">
<li>Удобные интервалы утром, днем и вечером</li>
<li>Подъем на этаж и помощь с установкой</li>
<li>Можно заказать и 19 л, и компактные форматы</li>
<li>Напоминание о повторном заказе</li>
</ul>
<div class="segment-meta">Часто выбирают: 2 бутыли 19 л + вода 5 л для кухни</div>
</article>
<article class="segment-card featured reveal reveal-delay-1">
<span class="eyebrow eyebrow-inverse">Доставка воды в офис</span>
<h3>Регулярные поставки для команды и клиентов</h3>
<p>Офисам, салонам, кафе, фитнес-клубам и студиям нужен предсказуемый сервис. Мы строим график так, чтобы запас воды не заканчивался в рабочие часы.</p>
<ul class="segment-list">
<li>Безналичная оплата и закрывающие документы</li>
<li>Автодоставка воды по графику</li>
<li>Приоритетные интервалы на будни</li>
<li>Комбинированные заказы для кулеров и гостей</li>
</ul>
<div class="segment-meta">Часто выбирают: 6-12 бутылей 19 л в неделю + минеральная вода для переговорных</div>
</article>
</div>
</div>
</section>
<section class="section" id="promotions">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Акции</span>
<h2 class="section-title">Выгоднее с первого заказа и еще удобнее по подписке</h2>
</div>
<p class="section-copy">Для новых и постоянных клиентов периодически действуют акции. Это удобный способ попробовать сервис или сделать регулярные заказы выгоднее.</p>
</div>
<div class="promo-grid">
<article class="promo-card highlight reveal">
<h3>Скидка на первый заказ</h3>
<p>На первый заказ действует скидка 10%. Это удобно, если хотите сначала попробовать сервис и оценить качество воды.</p>
</article>
<article class="promo-card reveal reveal-delay-1">
<h3>Автодоставка воды</h3>
<p>Настройте регулярный график: раз в 3 дня, неделю или по вашему потреблению. Мы напомним и приедем вовремя.</p>
</article>
<article class="promo-card reveal reveal-delay-2">
<h3>Помпа в подарок</h3>
<p>При заказе стартового комплекта для дома дарим механическую помпу, чтобы пользоваться 19-литровой бутылью было проще.</p>
</article>
<article class="promo-card reveal reveal-delay-3">
<h3>Офисный тариф</h3>
<p>Для корпоративных клиентов действует персональная цена при регулярном объеме и закрепленном графике поставок.</p>
</article>
</div>
</div>
</section>
<section class="section" id="faq">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">FAQ</span>
<h2 class="section-title">Частые вопросы о доставке воды в Севастополе</h2>
</div>
<p class="section-copy">Собрали вопросы, которые чаще всего задают перед первым заказом.</p>
</div>
<div class="faq-list">
<article class="faq-item reveal open">
<button class="faq-question" id="faq-question-1" aria-expanded="true" aria-controls="faq-answer-1">
<span>Как быстро вы привозите воду по Севастополю?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-1" role="region" aria-labelledby="faq-question-1">Обычно привозим воду в течение дня, а по активным маршрутам — быстрее. Точное время зависит от района и загрузки, поэтому ближайший интервал всегда подтверждаем заранее.</div>
</article>
<article class="faq-item reveal reveal-delay-1">
<button class="faq-question" id="faq-question-2" aria-expanded="false" aria-controls="faq-answer-2">
<span>Какие способы оплаты доступны?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-2" role="region" aria-labelledby="faq-question-2" hidden>Принимаем наличные, оплату картой при получении, перевод по номеру телефона и безналичный расчет для компаний. Для офисов можем выставить счет.</div>
</article>
<article class="faq-item reveal reveal-delay-2">
<button class="faq-question" id="faq-question-3" aria-expanded="false" aria-controls="faq-answer-3">
<span>Нужен ли залог за бутыль 19 литров?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-3" role="region" aria-labelledby="faq-question-3" hidden>Если у вас нет своей тары, при первом заказе может взиматься возвратный депозит за бутыль. При возврате тары депозит учитывается в следующих заказах.</div>
</article>
<article class="faq-item reveal reveal-delay-3">
<button class="faq-question" id="faq-question-4" aria-expanded="false" aria-controls="faq-answer-4">
<span>Как часто лучше заказывать воду домой?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-4" role="region" aria-labelledby="faq-question-4" hidden>Для семьи из 2-4 человек обычно достаточно заказа 2-4 бутылей 19 литров раз в 1-2 недели. Точный график зависит от потребления и наличия кулера.</div>
</article>
<article class="faq-item reveal">
<button class="faq-question" id="faq-question-5" aria-expanded="false" aria-controls="faq-answer-5">
<span>Откуда поступает вода и как контролируется качество?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-5" role="region" aria-labelledby="faq-question-5" hidden>Мы используем артезианскую воду из защищенного источника, проводим фильтрацию, санитарную обработку тары и регулярный лабораторный контроль. По запросу предоставляем информацию о сертификатах качества.</div>
</article>
<article class="faq-item reveal reveal-delay-1">
<button class="faq-question" id="faq-question-6" aria-expanded="false" aria-controls="faq-answer-6">
<span>Можно ли оформить доставку воды в офис?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-6" role="region" aria-labelledby="faq-question-6" hidden>Да, мы регулярно обслуживаем офисы, кафе, фитнес-клубы, студии и медицинские кабинеты. Настраиваем график, безнал и объем под ваш режим работы.</div>
</article>
<article class="faq-item reveal reveal-delay-2">
<button class="faq-question" id="faq-question-7" aria-expanded="false" aria-controls="faq-answer-7">
<span>Какой минимальный заказ действует для доставки?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-7" role="region" aria-labelledby="faq-question-7" hidden>Для воды 19 литров можно заказать от одной бутыли. Для небольших упаковок минимальная сумма заказа составляет 500 ₽, чтобы доставка оставалась быстрой и выгодной.</div>
</article>
<article class="faq-item reveal reveal-delay-3">
<button class="faq-question" id="faq-question-8" aria-expanded="false" aria-controls="faq-answer-8">
<span>Что делать с пустыми бутылками после использования?</span>
<span aria-hidden="true">+</span>
</button>
<div class="faq-answer" id="faq-answer-8" role="region" aria-labelledby="faq-question-8" hidden>Сохраните пустые бутыли до следующего визита курьера. Мы заберем их при следующей доставке или согласуем отдельный выезд при крупном заказе.</div>
</article>
</div>
</div>
</section>
<section class="section" id="about">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">О компании</span>
<h2 class="section-title">Чистый источник, строгий контроль, понятный сервис</h2>
</div>
<p class="section-copy">Важно не только откуда вода, но и как она проходит обработку, розлив и доставку. Поэтому мы уделяем внимание качеству на каждом этапе.</p>
</div>
<div class="about-grid">
<div class="glass-card about-copy reveal">
<h3>Следим не только за водой, но и за тем, в каком виде она приезжает к клиенту</h3>
<p>Вода поступает из артезианского источника, проходит очистку и контроль перед розливом. Не меньше внимания уделяем бутылям: их состояние и санитарная обработка напрямую влияют на вкус и качество воды.</p>
<p class="about-copy-secondary">По запросу можно получить информацию о качестве воды и условиях поставки. Для офисов и коммерческих объектов отдельно настраиваем регулярный график, чтобы запас воды не заканчивался в рабочее время.</p>
<div class="chip-row hero-actions-spaced">
<span class="chip">артезианская вода</span>
<span class="chip">контроль качества</span>
<span class="chip">сертификаты</span>
<span class="chip">санобработка тары</span>
</div>
</div>
<div class="about-visual reveal reveal-delay-1" aria-hidden="true">
<div class="droplet"></div>
<div class="quality-stack">
<div class="quality-card"><strong>Источник</strong><br>Защищенный артезианский горизонт</div>
<div class="quality-card"><strong>Проверка</strong><br>Регулярный лабораторный анализ качества</div>
<div class="quality-card"><strong>Тара</strong><br>Санитарная обработка и контроль оборота бутылей</div>
</div>
</div>
</div>
</div>
</section>
<section class="section" id="reviews">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Отзывы</span>
<h2 class="section-title">Что говорят клиенты о нашей воде и доставке</h2>
</div>
<p class="section-copy">Несколько отзывов от клиентов, которые заказывают воду домой, в офис и для коммерческих объектов.</p>
</div>
<div class="reviews-grid">
<article class="review-card reveal">
<strong>«Привозят точно в обещанный интервал»</strong>
<p>Заказываем воду 19 литров домой в Гагаринский район. Курьер всегда заранее звонит, поднимает бутыли и забирает пустые. Удобно, что не нужно снова объяснять адрес.</p>
<div class="review-meta">Марина, Севастополь</div>
</article>
<article class="review-card reveal reveal-delay-1">
<strong>«Для офиса это реально спасение»</strong>
<p>У нас небольшая команда, вода уходит быстро. С автодоставкой больше не вспоминаем в последний момент, что кулер пустой. Документы присылают без задержек.</p>
<div class="review-meta">Андрей, управляющий офисом</div>
</article>
<article class="review-card reveal reveal-delay-2">
<strong>«Вкус воды мягкий, без постороннего запаха»</strong>
<p>Переходили с другого поставщика и сразу почувствовали разницу. Вода приятная и для питья, и для чайника. Заказываем и 19 литров, и 5 литров домой.</p>
<div class="review-meta">Елена, Ленинский район</div>
</article>
<article class="review-card reveal reveal-delay-3">
<strong>«Хорошо работают с коммерческими заказами»</strong>
<p>Для нашего фитнес-клуба важна стабильность. Ребята привозят четко по графику, можно комбинировать большие бутыли и маленькие бутылки для стойки продаж.</p>
<div class="review-meta">Игорь, фитнес-клуб в Стрелецкой</div>
</article>
</div>
</div>
</section>
<section class="section" id="contacts">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Контакты</span>
<h2 class="section-title">Свяжитесь с нами и оформите заказ</h2>
</div>
<p class="section-copy">Позвоните нам или оставьте заявку на сайте — уточним детали и подберём удобное время доставки.</p>
</div>
<div class="contacts-grid">
<div class="contact-card reveal">
<h3>Контактные данные</h3>
<ul class="contact-list">
<li><strong>Телефон:</strong> <a href="tel:+79117748923">+7 (911) 774-89-23</a></li>
<li><strong>Адрес:</strong> г. Севастополь, ул. Генерала Острякова, 92</li>
<li><strong>График:</strong> ежедневно с 8:00 до 21:00</li>
<li><strong>E-mail:</strong> sygorenkomisha17@gmail.com</li>
</ul>
<form class="contact-form" id="contactForm">
<input class="field" type="text" name="name" placeholder="Ваше имя" aria-label="Ваше имя" required>
<input class="field" type="tel" name="phone" placeholder="Телефон" aria-label="Телефон" required>
<input class="field" type="text" name="address" placeholder="Адрес доставки в Севастополе" aria-label="Адрес доставки" required>
<textarea class="field" name="comment" placeholder="Что нужно доставить: например, 2 бутыли 19 л и 1 упаковка 1.5 л" aria-label="Комментарий к заказу"></textarea>
<button class="button" type="submit">Отправить заявку</button>
<div class="success-note" id="contactSuccess" role="status" aria-live="polite">Спасибо! Заявка принята. Мы свяжемся с вами для подтверждения заказа.</div>
</form>
</div>
<div class="map-placeholder reveal reveal-delay-1" aria-label="Условия обслуживания по городу">
<span class="eyebrow eyebrow-inverse">Зона обслуживания</span>
<h3 class="section-heading-compact section-heading-map">Принимаем заявки по всему Севастополю</h3>
<p class="map-copy">Работаем ежедневно и подбираем удобный интервал доставки для дома, офиса, кафе и небольших коммерческих точек.</p>
<div class="contact-fast-facts">
<article class="contact-fact-card">
<strong>Подтверждение заявки</strong>
<span>До 15 минут в рабочие часы, без долгого ожидания.</span>
</article>
<article class="contact-fact-card">
<strong>Окна доставки</strong>
<span>С 8:00 до 21:00 ежедневно, срочные слоты по возможности.</span>
</article>
<article class="contact-fact-card">
<strong>Дополнительный сервис</strong>
<span>Подъем воды и вывоз пустой тары при следующем визите.</span>
</article>
</div>
<div class="contact-quick-actions">
<a class="contact-quick-link" href="tel:+79117748923">Позвонить: +7 (911) 774-89-23</a>
<a class="contact-quick-link" href="mailto:sygorenkomisha17@gmail.com">Написать: sygorenkomisha17@gmail.com</a>
</div>
</div>
</div>
</div>
</section>
</main>
<div class="modal-backdrop" id="orderModal" aria-hidden="true">
<div class="modal-card" role="dialog" aria-modal="true" aria-labelledby="orderModalTitle">
<div class="modal-head">
<div>
<h3 id="orderModalTitle">Оформление заказа</h3>
<p class="dialog-copy">Оставьте контакты, и мы свяжемся с вами для подтверждения заказа.</p>
</div>
<button class="close-button" id="modalCloseButton" aria-label="Закрыть форму заказа">×</button>
</div>
<form class="contact-form" id="orderForm">
<input class="field" type="text" name="customerName" placeholder="Ваше имя" aria-label="Ваше имя" required>
<input class="field" type="tel" name="customerPhone" placeholder="Телефон" aria-label="Телефон" required>
<input class="field" type="text" name="customerAddress" placeholder="Адрес доставки" aria-label="Адрес доставки" required>
<select class="field" name="customerType" aria-label="Тип клиента">
<option value="Для дома">Для дома</option>
<option value="Для офиса">Для офиса</option>
</select>
<textarea class="field" name="customerOrder" id="orderItemsField" placeholder="Комментарий к заказу" aria-label="Комментарий к заказу"></textarea>
<button class="button" type="submit">Подтвердить заказ</button>
<div class="success-note" id="orderSuccess" role="status" aria-live="polite">Спасибо! Ваш заказ сохранен. Мы свяжемся с вами в ближайшее время.</div>
</form>
</div>
</div>
<footer class="footer premium-footer classic-footer">
<div class="container classic-footer-shell">
<div class="classic-footer-main">
<div class="classic-footer-col brand-col">
<a class="brand" href="https://dostavka-vodi-krim.ru/" aria-label="Перейти на главную страницу">
<span class="brand-mark" aria-hidden="true">
<!-- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C9 6.1 6 9.4 6 13.2C6 16.9 8.69 20 12 20C15.31 20 18 16.9 18 13.2C18 9.4 15 6.1 12 2Z" fill="currentColor"/>
</svg> -->
<img src="https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/images/logo.png" alt="">
</span>
<span class="brand-text">
<strong>АкваЛиния</strong>
<span>вода с доставкой для Севастополя</span>
</span>
</a>
<p class="footer-description">Доставка воды в Севастополе для дома, офиса, кафе и фитнес-клубов. Вода 19 литров, питьевая и минеральная вода с удобным заказом на сайте.</p>
</div>
<div class="classic-footer-col">
<h3>Навигация</h3>
<div class="footer-links">
<a href="https://dostavka-vodi-krim.ru/#catalog">Каталог</a>
<a href="https://dostavka-vodi-krim.ru/blog/">Блог</a>
<a href="https://dostavka-vodi-krim.ru/delivery/">Доставка воды в Севастополе</a>
<a href="https://dostavka-vodi-krim.ru/service/">Доставка воды в офис</a>
<a href="https://dostavka-vodi-krim.ru/faq/">Частые вопросы</a>
<a href="https://dostavka-vodi-krim.ru/contacts/">Контакты</a>
</div>
</div>
<div class="classic-footer-col">
<h3>Документы</h3>
<div class="footer-legal">
<a href="#">Политика конфиденциальности</a>
<a href="#">Пользовательское соглашение</a>
<a href="#">Условия использования</a>
</div>
</div>
</div>
<div class="footer-bottom classic-footer-bottom">
<span>© 2026 АкваЛиния. Все права защищены.</span>
<span>АкваЛиния — питьевая вода с доставкой в Севастополе</span>
</div>
</div>
</footer>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/twentytwentyfour/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script>
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
</script>
<link rel='stylesheet' id='wc-blocks-style-css' href='//dostavka-vodi-krim.ru/wp-content/cache/wpfc-minified/dtnbx2gx/bgsuq.css' media='all' />
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=10.5.3" id="sourcebuster-js-js"></script>
<script id="wc-order-attribution-js-extra">
var wc_order_attribution = {"params":{"lifetime":1.0000000000000001e-5,"session":30,"base64":false,"ajaxurl":"https://dostavka-vodi-krim.ru/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
//# sourceURL=wc-order-attribution-js-extra
</script>
<script src="https://dostavka-vodi-krim.ru/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=10.5.3" id="wc-order-attribution-js"></script>
<script id="twentytwentyfour-test1-script-js-extra">
var test1LeadForm = {"ajaxUrl":"https://dostavka-vodi-krim.ru/wp-admin/admin-ajax.php","action":"twentytwentyfour_submit_lead","nonce":"b8b6003050"};
//# sourceURL=twentytwentyfour-test1-script-js-extra
</script>
<script src="https://dostavka-vodi-krim.ru/wp-content/themes/twentytwentyfour/assets/js/test1-landing.js?ver=1776606670" id="twentytwentyfour-test1-script-js"></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://dostavka-vodi-krim.ru/wp-includes/js/wp-emoji-release.min.js?ver=6.9.4"}}
</script>
<script type="module">
/*! This file is auto-generated */
const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
//# sourceURL=https://dostavka-vodi-krim.ru/wp-includes/js/wp-emoji-loader.min.js
</script>
</body>
</html><!-- WP Fastest Cache file was created in 0.272 seconds, on 19.04.2026 @ 17:12 -->

0
wp-content/cache/index.html vendored Normal file
View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

@@ -1153,4 +1153,10 @@
19-04-2026 16:14:24 [dostavka-vodi-krim.ru][info] Webp conversion: Image saved successfully!
19-04-2026 16:14:24 [dostavka-vodi-krim.ru][debug] Updated queue item #669, attributes values: {"server_id":null,"object_id":624,"object_name":null,"item_type":"webp","item_hash":"0a58ef68676c410d52e607705cee3a207e2b4e096ca360f3dfc1a350e6fc1ad2","item_hash_alternative":null,"result_status":"success","processing_level":"normal","is_backed_up":false,"original_size":970,"final_size":806,"original_mime_type":"image\/png","final_mime_type":"image\/webp","extra_data":"{\"class\":\"RIOP_WebP_Extra_Data\",\"thumbnails_count\":7,\"convert_from\":\"attachment\",\"converted_from_size\":\"site_icon-32\",\"source_src\":\"http:\\\/\\\/dostavka-vodi-krim.ru\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-logo-1-32x32.png\",\"source_path\":\"\\\/home\\\/a0264400\\\/domains\\\/dostavka-vodi-krim.ru\\\/public_html\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-logo-1-32x32.png\",\"converted_src\":\"http:\\\/\\\/dostavka-vodi-krim.ru\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-logo-1-32x32.png.webp\",\"converted_path\":\"\\\/home\\\/a0264400\\\/domains\\\/dostavka-vodi-krim.ru\\\/public_html\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-logo-1-32x32.png.webp\"}","created_at":1776604451}
19-04-2026 16:14:24 [dostavka-vodi-krim.ru][info] End bulk optimization process! Scope: media-library. Remain: 0
-------------------------------
19-04-2026 17:10:54 [dostavka-vodi-krim.ru][info] Start bulk optimization process! Scope: media-library
19-04-2026 17:10:54 [dostavka-vodi-krim.ru][info] End bulk optimization process! Scope: media-library. Remain: 0
-------------------------------
19-04-2026 17:11:54 [dostavka-vodi-krim.ru][info] Start bulk optimization process! Scope: media-library
19-04-2026 17:11:54 [dostavka-vodi-krim.ru][info] End bulk optimization process! Scope: media-library. Remain: 0
-------------------------------

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,276 @@
button:focus {outline:0;}
.window-content-wrapper{
background-image:-webkit-gradient(linear, left top, left bottom, color-stop(50%, rgb(238,238,238)), color-stop(100%, rgb(219,219,219)));
background:-webkit-linear-gradient(center bottom, rgb(219,219,219) 50%, rgb(238,238,238) 100%);
background:-moz-linear-gradient(center bottom, rgb(219,219,219) 50%, rgb(238,238,238) 100%);
background:-o-linear-gradient(center bottom, rgb(219,219,219) 50%, rgb(238,238,238) 100%);
background:-ms-linear-gradient(center bottom, rgb(219,219,219) 50%, rgb(238,238,238) 100%);
background:linear-gradient(center bottom, rgb(219,219,219) 50%, rgb(238,238,238) 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#dbdbdb',GradientType=0 );
text-shadow:0 0 5px #fff;
border-bottom:1px solid #ABABAB;
border-top:1px solid #EEE6E6;
}
.wiz-inp-cont {
background: none repeat scroll 0 0 rgba(100, 100, 100, 0.1);
border-radius: 6px;
display: block;
margin-top: 24px;
padding: 12px;
position: relative;
}
.wiz-cont {
font-family: "Lucida Grande","Lucida Sans","Lucida Sans Unicode",Verdana,Tahoma,sans-serif;
font-size: 13px;
line-height: 18px;
min-height: 80px;
padding: 22px 28px;
}
.wiz-cont h1 {
font-size: 21px;
margin: 0 0 12px;
}
.wiz-cont p {
color: #666;
margin: 0;
}
.wiz-input-cont {
background: none repeat scroll 0 0 rgba(100, 100, 100, 0.1);
border-radius: 6px;
margin-top: 24px;
padding: 12px;
position: relative;
}
.wiz-input-cont label {
font-weight: bold;
margin-right: 12px;
}
.api-key {
border: 1px solid #999;
border-radius: 3px;
box-shadow: 0 1px 2px #eee inset, 0 1px 0 #ddd;
font-size: 13px;
padding: 4px 6px 3px;
width: 355px;
}
.window-buttons-wrapper button {
margin: 0 4px;
}
.wpfc-add-new-csp-button, .wpfc-add-new-timeout-button, .wpfc-add-new-exclude-button, .window-buttons-wrapper button[action="next"], .window-buttons-wrapper button[action="back"], .window-buttons-wrapper button[action="close"] {
background-color: gray !important;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAABaCAIAAAAU4rCTAAACGUlEQVQ4EQXBQbIkRxEFQH+V0V974Bjo/neaBTJhs6Ir4+GeX79+AQDmr7/+UxChmBawGsq0qxGqoabVVolUa7ZNW8IWpnsraAGzWwogMdsl2khTm9lb2dCqSKddVZRUze6CUIXZriJJW2T2lgLA7F4AQs3uAgBm9xIAmN1SoIrZ3ZY0oqRz74XQUMy9t1ASVfN9X5pGoDr3+5UAwLz3AgDmfS8gtGTufQEAc+9VAmjN3lsIJXTuXgIA8zwHAJDfv38DAObvv/9LRWgTnqRJVJtEdXYrTVOtaqZtahWKTtuCtonW7C6AFmZ3SdKWUNNuxQqFzr2l0UWipr0lJbFbZu8WJFqYuwsAmL1LIUqYuxfChorZvQSoYvZuCQ2VmHtX2iY0jczdCwCYe5eSKCqze0u0TRDz/X5Dk7RNtPP9vtIUoZV53y9QQpnv90XSVqQ67/s/AgDzvhdKAPO+L4FUkbn3AgBm96oKEtX8+e8/AQDzj3/9M0BJMed5QgkV6cxMCS2EOeeEhkrSdj6fIUpUMTMfACDz+flJS0rSMj8zElBSnc/PH9FCQnV+fj6gGkHn8/mAEmDOOQCAOedAIFXmnAMAmHNOKJBo55wDAJhzDkqgZJ5zoJCgc55HklbSNsmccwAAc55HtIRGzHMORKpgnnOiLY8UmfNE0yeBqnmeU6IqCSZPHtp4aBLz5EECgkyeJ4CCzHkeAMD/AViclsCJwxhXAAAAAElFTkSuQmCC') !important;
background-repeat: repeat-x !important;
border: 1px solid #777 !important;
color: #000 !important;
text-shadow: 0 1px 0 #eee !important;
}
.window-buttons-wrapper button[action="finish"]{
background-repeat:repeat-x !important;
background-color:green !important;
background-image:url("../images/button-back-green.png") !important;
color:#FFF;text-shadow:0 1px 0 rgba(0,0,0,0.4) !important;
border:1px solid green !important;
font-weight: bold;
}
.icon-right {
margin: -4px -2px 0 3px;
position: relative;
right: -3px;
top: 1px;
}
.big-button {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
border-color: -moz-use-text-color transparent;
border-image: none;
border-style: none solid;
border-width: medium 1px;
font-size: 11px;
margin: 0;
outline: medium none !important;
overflow: visible;
padding: 3px 6px;
text-shadow: 0 1px 0 #e5e5e5, 0 0 5px rgba(255, 255, 255, 0.6);
width: auto;
}
.window-buttons:hover,.wpfc-dialog-buttons:hover{
border-color:#999;
background-position:0 -30px;
}
.wpfc-dialog-buttons {
background: url("/images/button-back.png") repeat-x scroll 0 0 rgba(0, 0, 0, 0);
border: 1px solid #aaa;
padding: 4px 10px;
display: none;
}
.window-buttons:active,.wpfc-dialog-buttons:active{
border-color:#666;
background-position:0 -60px;
}
.close-wiz {
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAmCAYAAAAm56DSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODNEQTU1N0QyNTZBMTFFMDg0MjhBMzkwREEyOUQ5ODQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODNEQTU1N0UyNTZBMTFFMDg0MjhBMzkwREEyOUQ5ODQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4M0RBNTU3QjI1NkExMUUwODQyOEEzOTBEQTI5RDk4NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4M0RBNTU3QzI1NkExMUUwODQyOEEzOTBEQTI5RDk4NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg4s3CYAAAMbSURBVHjanJbLb0xxFMfvvVOjDaP1aM0U9aqohhARG41IbBoRKwsJCyspO7Eg8QewsGAhsbAikYiVjQVWXinxqCBdmFapR0v1kWI6HZ3re5LvT47jN5OZnuTTzvzu/X3vuef1mzDw2zKwA2wCa9V6H3gF7oMvshDH8d+LoRGpBYfAVvABDIHv6vpikAYt4Am4BrFpn9gicAKM0IM4KG2ybx3Fz0FwVIslwWmQBeNB5dYA1oAz4qETOwxmqhRytpCxuxLhfyOoN0Ii/Bb0q7WY32W9qNbHJERhGDYm8GEn+GFiNAB6wTeQA03gJWMpMZ3rPKJNyD01+NPMTdpWgjf8PEiBnLq+2twvnqblNac8cZBMdarvWmgvH2atUEpMYrMdLPUU8xbw3rNnKsECTJgLEr9brsqVTYJ3LFxrOfEs77kgT/5kYhioGA569uQjptZao4nRSRPDjGfPmBRtCnSAGpOAAlgA5IE97FeJ7y+GQcfttzS/64ANoNX0Xgs3DxuPkp4EZNEBvU4swewtmUU7SQ12QyyOVPs854Vq7Ct4FnOohZ7R0kpqyogU2FrZWE3HsMTNSbZZEwdmijWWZ+t9BNN20pZ6ugjtBtuYHGfS/E/BbV+tWc/qwDGwi/EbpUfOUpzIUod3wCV4lveJSSbPMhlDFYztZv4/BcERLSbz6QK9+FlFNueR4+KhK42uWQgFvF864kjAVpGqXm+EJPX3pBjNAOzm+oxalyndjrGdkcrfQ1e1PQZ31WklvXoTPOQIkkStUPeLd3VSGu2eYC9Xn3soMKHWVnnmX5u85hxPLKRP95sDw9kBsNmzpzYy7+9MSmMfx3RgPOpkT1orJljlSc9pc5n9p22c46fNIzYZlTjFpWVeq+961r1gHP+btBGDa63exOi8iaFv7g2EPJmPmlfN8EBp4MZ+eveZdZU2cZMJctEdKN2eBKRZ1O73RpbjKO1JgEzaiVCNooOeY78SkzBdhVgxUqfLjRLxK2fi7XUR8s2ziMdeh6dc/vkpAB6BB06o3NiW3tvInpzP3xzD7ME+lkbOju0/AgwAGgf5ial8jHIAAAAASUVORK5CYII=') no-repeat scroll 0 0 transparent;
height: 19px;
width: 22px;
cursor: pointer;
}
.mm-input-label{
font-weight: bold;
vertical-align: middle;
margin-right: 12px;
color: black;
}
.wiz-inp-readonly-textarea{
-moz-appearance: textfield;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
border-color: #aaaaaa #b0b0b0 #cbcbcb;
border-image: none;
border-radius: 3px;
border-style: solid;
border-width: 1px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
font-family: "Lucida Grande",monospace;
font-size: inherit !important;
line-height: 14px;
padding: 4px 6px 3px;
resize: none;
white-space: pre;
background-color: white !important;
}
.wiz-bg-img {
bottom: -40px;
clip: rect(0pt, 150px, 118px, 0pt);
height: 150px;
position: absolute;
right: 40px;
width: 150px;
z-index: -1;
opacity: 0.25;
}
.buttons-blood, .buttons-orange, .buttons-start{
background-repeat: repeat-x;
border: 1px solid #333 !important;
color: #fff;
text-shadow: 0 1px 0 #000 !important;
float: left;
font-weight: bold;
}
.buttons-blood {
background-image:url("../images/button-back-blood.png") !important;
}
.buttons-orange {
background-image:url("../images/button-back-fire.png") !important;
}
.buttons-start {
background-image:url("../images/button-back-green.png") !important;
}
.wpfc-green-button {
font-weight: bold;
padding:6px 18px;
color:#fff;
font-size:13px;
border:1px solid #309E1F;
text-shadow:0 -1px #309E1F;
cursor:pointer;
-moz-border-radius: 3px 3px;
-webkit-border-radius: 3px 3px;
border-radius: 3px 3px;
-moz-box-shadow: 0 1px #71EF61 inset, 0 1px #dadada;
-webkit-box-shadow: 0 1px #71EF61 inset, 0 1px #dadada;
box-shadow: 0 1px #71EF61 inset, 0 1px #dadada;
background: #39cc28;
background: -moz-linear-gradient(top, #39cc28 0%, #38bf26 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#39cc28), color-stop(100%,#38bf26));
background: -webkit-linear-gradient(top, #39cc28 0%,#38bf26 100%);
background: -o-linear-gradient(top, #39cc28 0%,#38bf26 100%);
background: -ms-linear-gradient(top, #39cc28 0%,#38bf26 100%);
background: linear-gradient(top, #39cc28 0%,#38bf26 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#39cc28', endColorstr='#38bf26',GradientType=0 );
}
.wpfc-green-button:hover {
background: #40db2b;
background: -moz-linear-gradient(top, #40db2b 0%, #3ecc28 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#40db2b), color-stop(100%,#3ecc28));
background: -webkit-linear-gradient(top, #40db2b 0%,#3ecc28 100%);
background: -o-linear-gradient(top, #40db2b 0%,#3ecc28 100%);
background: -ms-linear-gradient(top, #40db2b 0%,#3ecc28 100%);
background: linear-gradient(top, #40db2b 0%,#3ecc28 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#40db2b', endColorstr='#3ecc28',GradientType=0 );
}
.wpfc-green-button:active {
-moz-box-shadow: 0 1px #71EF61 inset;
-webkit-box-shadow: 0 1px #71EF61 inset;
box-shadow: 0 1px #71EF61 inset;
background: #38bf26;
background: -moz-linear-gradient(top, #38bf26 0%, #39cc28 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#38bf26), color-stop(100%,#39cc28));
background: -webkit-linear-gradient(top, #38bf26 0%,#39cc28 100%);
background: -o-linear-gradient(top, #38bf26 0%,#39cc28 100%);
background: -ms-linear-gradient(top, #38bf26 0%,#39cc28 100%);
background: linear-gradient(top, #38bf26 0%,#39cc28 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#38bf26', endColorstr='#39cc28',GradientType=0 );
}
.wiz-error-msg, .wiz-error-msg a{
color: red;
font-weight: bold;
text-align: center;
padding-left: 22px;
display: block;
}
#cdn-url-loading{
background: url("../images/loading-circle.gif") no-repeat;
width: 20px;
height: 18px;
margin-top: 5px;
float: right;
display: none;
}
.wpfc-checkbox-list {
margin-top: 24px;
padding:15px;
background:rgba(150,150,150,0.2);
-moz-border-radius:5px 5px;
-webkit-border-radius:5px 5px;
border-radius:5px 5px;
background:rgba(150,150,150,0.2);
background: -ms-linear-gradient(top, rgba(150,150,150,0.2) 0%,rgba(150,150,150,0.2) 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#33969696', endColorstr='#33969696',GradientType=0 ); /* IE6-9 */
}
.wpfc-checkbox-list label{
width:110px;
display:inline-block;
margin-top:3px;
color:#333333;
}
.wpfc-checkbox-list label input {
margin-right:5px;
vertical-align:bottom;
}
.wpfc-bottom-note{
margin-top: 20px !important
}
.wpfc-bottom-note a{
font-weight: bold;
}

View File

@@ -0,0 +1,67 @@
@font-face {
font-family: "Flaticon";
src: url("fonts/statics/flaticon.eot");
src: url("fonts/statics/flaticon.eot#iefix") format("embedded-opentype"),
url("fonts/statics/flaticon.woff") format("woff"),
url("fonts/statics/flaticon.ttf") format("truetype"),
url("fonts/statics/flaticon.svg") format("svg");
font-weight: normal !important;
font-style: normal !important;
}
[class^="flaticon-"]:before, [class*=" flaticon-"]:before,
[class^="flaticon-"]:after, [class*=" flaticon-"]:after {
font-family: Flaticon;
font-size: 40px !important;
font-style: normal !important;
color: #ff8900 !important;
}.flaticon-css4:before {
content: "\e000";
}
.flaticon-desktop1:before {
content: "\e001";
}
.flaticon-js:before {
content: "\e002";
}
.flaticon-smart:before {
content: "\e003";
}
@font-face {
font-family: "Flaticon";
src: url("fonts/db/flaticon.eot");
src: url("fonts/db/Flaticon.eot?#iefix") format("embedded-opentype"),
url("fonts/db/Flaticon.woff") format("woff"),
url("fonts/db/Flaticon.ttf") format("truetype"),
url("fonts/db/Flaticon.svg#Flaticon") format("svg");
font-weight: normal;
font-style: normal;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: "Flaticon";
src: url("fonts/db/Flaticon.svg#Flaticon") format("svg");
}
}
[class^="flaticon-"]:before, [class*=" flaticon-"]:before,
[class^="flaticon-"]:after, [class*=" flaticon-"]:after {
font-family: Flaticon;
line-height: 44px !important;
font-style: normal !important;
}
.flaticon-check:before { content: "\f100"; color:#5cab40 !important; font-size: 25px !important;}
.flaticon-counterclockwise:before { content: "\f101"; font-weight: bold; font-size: 35px !important;}
.flaticon-draft:before { content: "\f102"; font-size: 35px !important;}
.flaticon-file:before { content: "\f103"; font-weight: bold; font-size: 35px !important;}
.flaticon-interface:before { content: "\f104"; font-weight: bold; font-size: 35px !important;}
.flaticon-pingback:before { content: "\f105"; font-weight: bold; font-size: 35px !important;}
.flaticon-recycling:before { content: "\f106"; font-weight: bold; font-size: 35px !important;}
.flaticon-start-settings:before { content: "\f107"; color:#3498db !important; font-size: 30px !important;}
.flaticon-technology:before { content: "\f108"; font-weight: bold; font-size: 35px !important;}

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2016-12-28: Created.
-->
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
Created by FontForge 20120731 at Wed Dec 28 12:36:45 2016
By Apache
Created by Apache with FontForge 2.0 (http://fontforge.sf.net)
</metadata>
<defs>
<font id="Flaticon" horiz-adv-x="512" >
<font-face
font-family="Flaticon"
font-weight="500"
font-stretch="normal"
units-per-em="512"
panose-1="2 0 6 3 0 0 0 0 0 0"
ascent="448"
descent="-64"
bbox="-0 -64.0207 512 448"
underline-thickness="25.6"
underline-position="-51.2"
unicode-range="U+0020-F108"
/>
<missing-glyph />
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
/>
<glyph glyph-name="uniF107" unicode="&#xf107;"
d="M128 448l384 -224l-195.2 -108.8v6.39941l-22.3994 6.40039l-19.2002 6.40039v3.19922l19.2002 38.4004l-57.6006 57.5996l-38.3994 -19.1992h-3.2002l-6.40039 19.1992l-6.39941 22.4004h-54.4004v192zM144 112c19.2002 0 32 -12.7998 32 -32s-12.7998 -32 -32 -32
c-6.40039 0 -12.7998 3.2002 -16 6.40039c-9.59961 3.19922 -16 16 -16 25.5996s6.40039 19.2002 16 25.5996c3.2002 3.2002 9.59961 6.40039 16 6.40039zM288 64l-35.2002 -9.59961c-3.2002 -9.60059 -6.39941 -19.2002 -12.7998 -28.8008l16 -35.1992l-22.4004 -22.4004
l-32 16c-9.59961 -6.40039 -19.1992 -9.59961 -28.7998 -12.7998l-12.7998 -35.2002h-32l-9.59961 35.2002c-9.60059 3.2002 -19.2002 6.39941 -28.8008 12.7998l-35.1992 -16l-22.4004 22.4004l16 32c-6.40039 9.59961 -9.59961 19.1992 -12.7998 28.7998l-35.2002 12.7998
v32l35.2002 9.59961c3.2002 9.60059 6.39941 19.2002 12.7998 28.8008l-16 35.1992l22.4004 22.4004l32 -16c9.59961 6.40039 19.1992 9.59961 28.7998 12.7998l12.7998 35.2002h32l12.7998 -35.2002c9.60059 -3.2002 19.2002 -6.39941 28.7998 -12.7998l32 16
l22.4004 -22.4004l-16 -32c6.40039 -9.59961 9.59961 -19.1992 12.7998 -28.7998l35.2002 -12.7998v-32zM144 16c35.2002 0 64 28.7998 64 64s-28.7998 64 -64 64s-64 -28.7998 -64 -64s28.7998 -64 64 -64z" />
<glyph glyph-name="uniF101" unicode="&#xf101;"
d="M289.395 415.319c122.945 0 222.605 -99.9766 222.605 -223.319s-99.6602 -223.319 -222.605 -223.319c-51.7012 0 -99.2793 17.6973 -137.074 47.3604l38.2852 40.9648c27.6592 -20.4141 61.8105 -32.4951 98.7891 -32.4951c92.2139 0 166.955 74.9863 166.955 167.489
s-74.7412 167.489 -166.955 167.489c-90.3408 0 -163.873 -71.9961 -166.809 -161.912h77.7695l-100.172 -111.659l-100.184 111.659h66.9248c2.96875 120.756 101.393 217.742 222.47 217.742zM269.606 311.83h38.1387v-111.933l70.666 -70.6719l-26.9561 -26.9561
l-81.8486 81.833v127.728z" />
<glyph glyph-name="uniF105" unicode="&#xf105;"
d="M487.319 448c13.8721 0 24.667 -10.7949 24.6738 -24.667v-208.208c0 -13.8789 -10.7812 -24.6738 -24.667 -24.6738h-206.659c-13.8721 0 -24.667 10.7949 -24.667 24.6738v208.201c0 13.8789 10.7881 24.6738 24.667 24.6738h206.652zM345.437 431.036
c-6.16895 0 -9.24609 -4.62598 -9.25293 -9.25195c0 -4.62695 4.62695 -9.25293 9.25293 -9.25293s9.25293 4.62598 9.25293 9.25293c0 4.62598 -4.62695 9.25195 -9.25293 9.25195zM319.228 431.036c-6.16895 0 -9.25977 -4.62598 -9.25977 -9.25195
c0 -4.62695 4.62598 -9.25293 9.25977 -9.25293c4.62598 0 9.25293 4.62598 9.25293 9.25293c0 4.62598 -4.62695 9.25195 -9.25293 9.25195zM291.462 431.036c-4.61914 0 -9.24609 -4.62598 -9.25293 -9.25195c0 -4.62695 4.62695 -9.25293 9.25293 -9.25293
c4.62695 0 9.25293 4.62598 9.25293 9.25293c0 4.62598 -4.62598 9.25195 -9.25293 9.25195zM484.228 235.173v0l-3.11816 166.557c0 7.70996 -6.14844 15.4209 -15.4141 15.4209h-67.8477c-7.70312 0 -15.4141 -6.16797 -15.4141 -15.4209
c0 -7.71094 0 -7.71094 -15.4141 -7.71094h-67.8467c-7.7041 0 -15.415 -6.16113 -15.415 -15.4141v-143.432c0 -7.7041 6.14844 -15.4072 15.415 -15.4072h169.634c7.71094 0 15.4209 6.1543 15.4209 15.4072zM231.326 192.007c13.8857 0 24.6738 -10.8018 26.209 -24.6738
v-206.659c0 -13.8857 -10.7949 -24.6738 -24.6738 -24.6738h-208.188c-13.8926 0 -24.6738 10.7881 -24.6738 24.6738v206.659c0 13.8857 10.7812 24.6738 24.6738 24.6738h206.652zM89.457 175.044c-4.63281 0 -9.27344 -4.62695 -9.2666 -9.2666
c0 -4.62695 4.64062 -9.25293 9.2666 -9.25293c4.62695 0 9.25293 4.62598 9.25293 9.25293c0 4.63965 -4.62598 9.2666 -9.25293 9.2666zM63.2344 175.044c-4.62695 0 -9.25977 -4.62695 -9.25977 -9.2666c0 -4.62695 4.63281 -9.25293 9.25977 -9.25293
c4.62598 0 9.2666 4.62598 9.2666 9.25293c0 4.63965 -4.64062 9.2666 -9.2666 9.2666zM37.0107 175.044c-6.1748 0 -9.23828 -4.62695 -9.25293 -9.2666c0 -4.62695 4.62695 -9.25293 9.25293 -9.25293c4.62695 0 9.25293 4.62598 9.25293 9.25293
c0 4.63965 -4.62598 9.2666 -9.25293 9.2666zM228.228 -19.2715v0l-1.54883 166.543c0 7.7041 -6.1543 15.4209 -15.4209 15.4209h-67.8398c-7.71094 0 -15.4219 -6.16797 -15.4219 -15.4209c0 -7.71094 0 -7.71094 -15.4209 -7.71094h-67.8398
c-7.71094 0 -15.4209 -6.16113 -15.4209 -15.4141v-143.418c0 -7.71777 6.1543 -15.4209 15.4209 -15.4209h168.085c7.71094 0 15.4072 6.16113 15.4072 15.4209zM97.1611 238.271l-15.4219 15.4219l72.4668 72.4727l-23.1182 23.1455l78.6416 16.9502l-16.9639 -77.1133
l-23.125 21.6035zM414.832 145.729l15.4287 -15.415l-72.4873 -72.4795l23.1455 -23.1318l-78.6553 -16.9707l16.9639 77.1201l23.1318 -21.5898z" />
<glyph glyph-name="uniF106" unicode="&#xf106;"
d="M375.736 334.727l36.9531 21.3281l-20.1885 -60.9219l-20.1719 -60.9062l-62.8438 12.9844l-62.8447 12.9844l36.7197 21.1875l-28.5479 49.4531l-55.7666 -96.5938l-92.375 53.3438l86.5469 149.891h0.0166016h123.143h0.03125zM191.236 263.385l51.25 88.7812
l-36.9385 63.9844h-0.015625l-69.7197 -120.767zM372.25 301.852l2.5625 7.70312l-6.89062 -3.9834l-10.6719 18.4834l-53.1562 92.0947h-73.9053l71.6396 -124.095l10.6719 -18.4834l-6.65625 -3.82812l7.95312 -1.6416l44.25 -9.14062zM425.469 245.773l86.5312 -149.905
l-0.015625 -0.0166016l-61.5781 -106.672h-118.656v-42.6572l-42.6562 47.9219l-42.6719 47.9375l42.6719 47.9385l42.6562 47.9219v-42.3916h57.0938l-55.75 96.5781zM438.094 10.5234l36.9531 64.001h-143.297h-21.3281v7.67188l-5.40625 -6.06348l-30.0303 -33.75
l30.0303 -33.75l5.40625 -6.0625v7.95312h21.3281h106.344zM487.359 95.8516l0.015625 0.0166016l-69.7188 120.75l-55.4219 -32l51.25 -88.7666h73.875zM123.156 96.1484h111.532v-106.655h-173.095l-61.5781 106.656l-0.015625 0.0302734l59.3271 102.75l-36.9531 21.3281
l62.8438 12.9844l62.8438 12.9834l20.1885 -60.9053l20.1719 -60.9209l-36.7188 21.2021zM24.6406 96.1797l36.9531 -64l71.6416 124.079l10.6553 18.4844l6.65625 -3.84375l-2.54688 7.70215l-14.2188 42.8916l-44.2344 -9.1416l-7.95312 -1.64062l6.875 -3.96875
l-10.6553 -18.4844zM213.344 10.8203v64h-102.5l-36.9375 -63.9844l0.015625 -0.015625h139.422z" />
<glyph glyph-name="uniF102" unicode="&#xf102;"
d="M256.209 259.38c0 -9.45117 -7.65137 -17.1025 -17.1182 -17.1025h-153.935c-9.45117 0 -17.1182 7.65137 -17.1182 17.1025c0 9.43457 7.66699 17.0859 17.1182 17.0859h153.935c9.4834 0 17.1182 -7.65137 17.1182 -17.0859zM345.898 269.795l85.8633 -77.0078
l-182.062 -202.957l-85.832 77.0068zM321.596 187.805l-0.53125 0.466797c-2.04102 1.83203 -4.70898 2.76367 -7.40918 2.61914s-5.27246 -1.36621 -7.05664 -3.3916l-97.71 -108.912c-4.06641 -4.5166 -3.68066 -11.4609 0.835938 -15.5107
c2.02539 -1.84863 4.67773 -2.79688 7.41016 -2.63672c2.7002 0.161133 5.25586 1.38281 7.07227 3.42383l98.1758 109.46c3.79297 4.19434 3.42383 10.7041 -0.787109 14.4814zM341.88 226.976l-4.83789 -5.40039c-1.78418 -2.02539 -2.73242 -4.69336 -2.60449 -7.41016
c0.161133 -2.71582 1.38281 -5.27246 3.3916 -7.08789l0.5625 -0.499023c2.04199 -1.81543 4.70996 -2.74805 7.41016 -2.60352c2.73242 0.144531 5.27246 1.36621 7.07227 3.3916l11.7012 13.0352l-8.19727 7.3457c-4.21094 3.79297 -10.7051 3.43945 -14.498 -0.771484z
M354.176 279.069l21.1045 23.499l85.8311 -77.0068l-21.0879 -23.5zM499.029 267.818l-30.1699 -33.6416l-85.8477 76.9912l30.2178 33.6416c3.96973 4.5 9.64355 7.2002 15.6709 7.52148c6.02832 0.337891 11.9268 -1.75195 16.4111 -5.76953l51.9814 -46.6611
c9.33887 -8.37402 10.126 -22.7441 1.73633 -32.082zM482.136 283.023l-51.9648 46.6445l-15.0605 -16.748l51.9648 -46.6611zM153.613 55.3604l85.8154 -77.0068l-101.423 -41.5654c-3.90625 -1.5752 -8.37402 -0.820312 -11.5088 2.00879
c-3.15039 2.84473 -4.3877 7.18457 -3.23047 11.2354zM161.457 28.0039l-11.6055 -40.2959l22.6797 -20.3809l38.7686 15.8486zM132.042 57.6592l-10.0137 -34.751h-76.0742c-21.4102 0 -38.7852 17.3594 -38.7852 38.7695v281.958
c0 21.4102 17.3594 38.7852 38.7852 38.7852h47.2549v2.79688c0 7.9082 6.41309 14.3047 14.3057 14.3047h11.8945c-0.241211 1.71973 -0.370117 3.77734 -0.370117 5.70605c0 23.5801 19.1758 42.7715 42.7715 42.7715c23.6113 0 42.7705 -19.1914 42.7705 -42.7715
c0 -1.92871 -0.160156 -3.98633 -0.369141 -5.68945h12.0391c7.9082 0 14.3047 -6.41309 14.3047 -14.3057v-2.79688h46.1309c21.4092 0 38.7686 -17.375 38.7686 -38.7842v-74.4199l-34.2041 -38.126v96.2471c0 11.2354 -9.08105 20.333 -20.3164 20.333h-30.3945v-19.3047
c0 -7.8916 -6.41309 -14.3047 -14.3057 -14.3047h-108.704c-7.9082 0 -14.3047 6.41309 -14.3047 14.3047v19.3047h-30.957c-11.2354 0 -20.333 -9.11426 -20.333 -20.333v-249.361c0 -11.2676 9.11328 -20.3496 20.333 -20.3496h69.7734v0.0166016zM144.708 405.229
c0 -1.99316 0.370117 -3.98633 0.980469 -5.70605h32.2275c0.642578 1.71973 0.996094 3.69727 0.996094 5.70605c0 9.43555 -7.66699 17.1182 -17.1016 17.1182c-9.45117 0 -17.1025 -7.68262 -17.1025 -17.1182zM240.28 185.346
c-0.385742 -0.015625 -0.788086 -0.0478516 -1.18945 -0.0800781h-153.935c-9.45117 0 -17.1182 7.95605 -17.1182 17.3906c0 9.46777 7.66699 17.3916 17.1182 17.3916h153.95c9.32324 0 16.8779 -7.68262 17.1025 -16.9414zM68.0381 145.966
c0 9.45117 7.66699 17.1025 17.1182 17.1182h135.161l-30.6523 -34.1875h-104.509c-9.45117 0 -17.1182 7.61816 -17.1182 17.0693z" />
<glyph glyph-name="uniF103" unicode="&#xf103;"
d="M469.333 88.6611c0 -40.502 -20.2715 -76.3633 -51.1982 -97.9785v-12.0166c0 -23.5342 -19.1494 -42.666 -42.667 -42.666h-290.134c-23.5176 0 -42.667 19.1318 -42.667 42.667v426.666c0.000976562 23.5352 19.1494 42.667 42.667 42.667h221.867
c1.79199 0 3.44824 -0.545898 4.83008 -1.50195l102.315 -68.1973c2.51172 -1.67578 3.90625 -4.52246 3.78809 -7.44629v-184.215c30.9268 -21.6162 51.1982 -57.4766 51.1982 -97.9785zM315.734 423.509v-18.1758c0 -14.1143 11.4863 -25.6006 25.5996 -25.6006h40.0898z
M366.935 -12.3096c48.375 8.14746 85.333 50.3105 85.333 100.971h-25.5996v17.0674h24.1699c-8.14648 48.374 -50.3105 85.333 -100.97 85.333v-25.6006h-17.0674v24.1709c-42.5186 -7.16016 -76.2168 -40.6006 -83.7529 -82.9922l40.7803 23.5449l8.5332 -14.7617
l-59.1191 -34.1338c-1.34961 -0.785156 -2.7998 -1.16113 -4.25 -1.16113c-2.95215 0 -5.82031 1.53613 -7.40723 4.26758l-34.1328 59.1182l14.7793 8.5332l24.1299 -41.791c10.1943 55.5928 59.001 97.8721 117.505 97.8721c18.3135 0 35.6748 -4.14746 51.2012 -11.5449
v166.085h-59.7314c-23.5176 0 -42.667 19.1318 -42.667 42.667v25.5977h-213.335c-14.1133 0 -25.5996 -11.4854 -25.5996 -25.5996v-426.667c0 -14.1143 11.4863 -25.5996 25.5996 -25.5996h290.134c14.1133 0 25.5996 11.4854 25.5996 25.5996v2.07227
c-15.5264 -7.39648 -32.8877 -11.5439 -51.2002 -11.5439c-31.915 0 -61.8828 12.4248 -84.4463 34.9697l12.0664 12.0664c19.3203 -19.3193 45.0225 -29.9697 72.3799 -29.9697v25.6006h17.0674v-24.1709zM397.753 151.687l12.3975 -11.7295l-48.4795 -51.2383
l28.5703 -29.5312l-12.2656 -11.8652l-28.0449 28.9883l-5.86816 -6.20117l-12.3965 11.7295l6.38672 6.75l-6.37988 6.59375l12.2656 11.8662l5.85352 -6.05078z" />
<glyph glyph-name="uniF104" unicode="&#xf104;"
d="M358.37 448c84.6719 0 153.562 -68.8896 153.553 -153.562v-119.437c0 -81.8145 -64.3076 -148.887 -145.03 -153.332v-71.1836c0 -5.87793 -3.50586 -11.125 -8.93164 -13.377c-1.80859 -0.742188 -3.69434 -1.10938 -5.5625 -1.10938
c-3.75391 0 -7.43945 1.47559 -10.2207 4.24902l-16.0039 16.0127c-42.0332 42.0332 -97.9219 65.1787 -157.367 65.1787h-15.1855c-84.6719 0 -153.562 68.8887 -153.562 153.562v119.437c0 84.6719 68.8896 153.562 153.562 153.562h204.749zM494.869 175.002h0.00878906
v119.437c0 75.2617 -61.2373 136.499 -136.499 136.499h-204.749c-75.2627 0 -136.499 -61.2373 -136.499 -136.499v-119.437c0 -75.2627 61.2363 -136.5 136.499 -136.5h15.1855c64.001 0 124.172 -24.9189 169.43 -70.1768l11.5938 -11.5947v73.2402v8.53125v34.125
c0 4.70898 3.81348 8.53125 8.53125 8.53125s8.53125 -3.82227 8.53125 -8.53125v-33.6895c71.2871 4.43652 127.968 63.6768 127.968 136.064zM145.09 285.779c-4.70898 0 -8.53125 3.82227 -8.53125 8.53125s3.81348 8.53125 8.53125 8.53125h119.438
c4.71777 0 8.53125 -3.82227 8.53125 -8.53125s-3.81348 -8.53125 -8.53125 -8.53125h-119.438zM375.433 234.592c4.71777 0 8.53125 -3.82129 8.53125 -8.53125c0 -4.70898 -3.81348 -8.53125 -8.53125 -8.53125h-230.343c-4.71777 0 -8.53125 3.82227 -8.53125 8.53125
c0 4.70996 3.81348 8.53125 8.53125 8.53125h230.343zM375.433 166.343c4.71777 0 8.53125 -3.82227 8.53125 -8.53125c0 -4.70996 -3.81348 -8.53125 -8.53125 -8.53125h-230.343c-4.71777 0 -8.53125 3.82129 -8.53125 8.53125c0 4.70898 3.81348 8.53125 8.53125 8.53125
h230.343z" />
<glyph glyph-name="uniF108" unicode="&#xf108;"
d="M256 437c113.1 0 198.4 -38.5 198.4 -89.5996v-310.801c0 -51.1992 -85.3008 -89.6992 -198.4 -89.6992s-198.4 38.5996 -198.4 89.6992v310.801c0 51.0996 85.3008 89.5996 198.4 89.5996zM429.9 140.2v59.0996c-33.1006 -27.3994 -97.1006 -45.2002 -173.9 -45.2002
s-140.7 17.8008 -173.9 45.2002v-59.0996c0 -30.9004 71.4004 -65.2002 173.9 -65.2002s173.9 34.4004 173.9 65.2002zM429.9 243.8v59.1006c-33.1006 -27.4004 -97.1006 -45.2002 -173.9 -45.2002s-140.7 17.7998 -173.9 45.2002v-59.1006
c0 -30.8994 71.4004 -65.2002 173.9 -65.2002s173.9 34.4004 173.9 65.2002zM256 412.5c-102.5 0 -173.9 -34.2998 -173.9 -65.2002c0 -30.8994 71.4004 -65.2002 173.9 -65.2002s173.9 34.3008 173.9 65.2002c0 30.9004 -71.4004 65.2002 -173.9 65.2002zM256 -28.5
c102.5 0 173.9 34.2998 173.9 65.2002v59.0996c-33.1006 -27.3994 -97.1006 -45.2002 -173.9 -45.2002s-140.7 17.8008 -173.9 45.2002v-59.0996c0 -30.9004 71.4004 -65.2002 173.9 -65.2002z" />
<glyph glyph-name="uniF100" unicode="&#xf100;"
d="M256 448c141.152 0 256 -114.848 256 -256s-114.848 -256 -256 -256s-256 114.848 -256 256s114.848 256 256 256zM256 0c105.888 0 192 86.1123 192 192s-86.1123 192 -192 192s-192 -86.1123 -192 -192s86.1123 -192 192 -192zM361.216 310.464l45.5684 -44.9277
l-159.776 -161.984c-6.01562 -6.11133 -14.6562 -10.0156 -22.7842 -9.53613c-8.47949 0 -16.6074 3.36035 -22.624 9.37598l-96 96l45.248 45.248l73.2168 -73.248z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1 @@
Silence is golden.

View File

@@ -0,0 +1,564 @@
/* Set the size and font of the tab widget */
.tabGroup {
background: none repeat scroll 0 0 #F3F1EB;
border: 1px solid #DEDBD1;
padding: 10px;
width: 750px;
height: auto;
float: left;
box-sizing: unset;
}
.tabGroup div.questionCon{
width: 100%;
float: left;
padding-top: 5px;
line-height: 18px;
}
.tabGroup select, .tabGroup label, .tabGroup div {
font-size: 12px;
box-sizing: unset;
}
.tabGroup > label{
font-weight: normal !important;
margin-bottom: 0 !important;
}
div.inputCon label{
font-weight: normal !important;
margin-bottom: 0 !important;
}
div.questionCon.qsubmit{
text-align: center;
}
.tabGroup div.questionCon.disabled{
color: #888;
}
.tabGroup div.question{
padding-right: 5px;
float: left;
text-align: right;
width: 130px;
font-weight: normal !important;
background: none !important;
}
.tabGroup div.inputCon{
float:left;
}
/* Configure the radio buttons to hide off screen */
.tabGroup > input[type="radio"] {
position: absolute;
left:-100px;
top:-100px;
}
/* Configure labels to look like tabs */
.tabGroup > input[type="radio"] + label {
/* inline-block such that the label can be given dimensions */
display: inline-block;
/* A nice curved border around the tab */
border: 1px solid #DEDBD1;
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-radius: 5px 5px 0 0;
/* the bottom border is handled by the tab content div */
border-bottom: 0;
/* Padding around tab text */
padding: 5px 10px;
/* Set the background color to default gray (non-selected tab) */
background-color:#ddd;
color: black;
box-shadow: none !important;
}
/* Focused tabs need to be highlighted as such */
.tabGroup > input[type="radio"]:focus + label {
border:1px dashed #DEDBD1;
}
/* Checked tabs must be white with the bottom border removed */
.tabGroup > input[type="radio"]:checked + label {
background-color:white;
font-weight: bold;
border-bottom: 1px solid white;
margin-bottom: -1px;
}
/* The tab content must fill the widgets size and have a nice border */
.tabGroup > div {
display: none;
border: 1px solid #DEDBD1;
background-color: white;
padding: 10px 0px;
height: auto;
overflow: auto;
margin-top: -1px;
border-radius: 0 5px 5px 5px;
-moz-border-radius: 0 5px 5px 5px;
-webkit-border-radius: 0 5px 5px 5px;
}
/* This matchs tabs displaying to thier associated radio inputs */
#wpfc-options:checked ~ .tab1, #wpfc-deleteCache:checked ~ .tab2, #wpfc-cacheTimeout:checked ~ .tab3, #wpfc-imageOptimisation:checked ~ .tab4, #wpfc-premium:checked ~ .tab5, #wpfc-exclude:checked ~ .tab6 , #wpfc-cdn:checked ~.tab7, #wpfc-db:checked ~.tab8{
display: block;
}
/* for lef panel */
#toplevel_page_wpfastestcacheoptions img{
margin-top: -7px !important;
width: 30px !important;
/* padding: 0 !important;
margin-left: 5px !important;*/
}
#toplevel_page_wpfastestcacheoptions div.wp-menu-name{
margin-left: 0 !important;
}
.question:after {
content: ":";
padding-left: 5px;
}
.inputCon input[type="checkbox"]{
margin-right: 5px;
}
.get-info {
float: left;
padding-left: 10px;
cursor: pointer;
}
#rule-help-tip {
width: 500px;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 8px 8px 8px 8px;
box-shadow: 4px 4px 10px #CCCCCC;
display: block;
padding: 10px 10px 0;
position: absolute;
}
#rule-help-tip h4 {
color: #6397CB;
margin-top: 0;
font-size: 14px;
letter-spacing: -1px;
}
h1.summary-rec {
border-bottom: 0 none;
color: #777777;
font-size: 14px;
font-weight: normal;
letter-spacing: normal;
margin: 0 0 0.5em;
}
.close-window {
background: url("../images/close-wiz-sprite.png") no-repeat scroll 0 -19px rgba(0, 0, 0, 0);
height: 19px;
width: 22px;
float: right;
}
.omni_admin_sidebar {
float: right;
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
font-size: 12px;
margin-right: 30px;
width: 400px;
}
.omni_admin_sidebar_section {
background-color: #F6F6F6;
float: right;
width: 195px;
padding: 0;
border: none;
margin-bottom: 15px;
}
.wpfc-sticky-notification main { overflow-x: hidden }
.wpfc-sticky-notification { font-family: "Open Sans", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen-sans, ubuntu, cantarell, "Helvetica Neue", sans-serif }
.wpfc-sticky-notification, .wpfc-sticky-notification a { color: #0A1551 }
.wpfc-sticky-notification { font-size: 16px; line-height: 1.4; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale }
.wpfc-sticky-notification img { max-width: 100%; vertical-align: bottom }
.wpfc-sticky-notification a { text-decoration: none }
.wpfc-sticky-notification main { width: 100%; position: relative; transition: all .3s }
.wpfc-sticky-notification h5 { margin: 1rem 0 }
.wpfc-sticky-notification h5 { font-size: 22px }
.wpfc-sticky-notification .sticky-common-banner { transition: all .2s; background-color: #0A1551; box-shadow: 0 3px 10pc rgba(0, 0, 0, .1); border-radius: 0; z-index: 7020; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; align-items: center; overflow: hidden; width: 100% }
.wpfc-sticky-notification .sticky-common-banner { background-color:#fff; left: initial; right: 8px; bottom: 16px; }
.wpfc-sticky-notification .section-widget-footer.fixed+.sticky-common-banner { bottom: 88px }
.wpfc-sticky-notification .sticky-common-banner .header { background-color: #0A1551; display: flex; flex-direction: column; align-items: center; width: 100%; padding: 16px 0 0 }
.wpfc-sticky-notification .sticky-common-banner .header-logo { height: 42px; margin: 0 0 8px; }
.wpfc-sticky-notification .sticky-common-banner .title { margin: 0 8px 16px; color: #fff; text-align: center; font-weight: 400; font-size: 14px; line-height: 16px }
.wpfc-sticky-notification .sticky-common-banner .header-logo { display:block }
.wpfc-sticky-notification .sticky-common-banner .visual { margin: 0; width: 100%; height: auto; display: none }
.wpfc-sticky-notification .sticky-common-banner .main-cta { transition: all .2s; background-color: #78BB07; font-weight: 500; font-size: 14px; line-height: 16px; text-align: center; color: #FFF; border: none; box-sizing: border-box; padding: 16px 8px; margin: 16px; width: calc(100% - 48px); max-width: 240px }
.wpfc-sticky-notification .sticky-common-banner .main-cta:hover { background: #88d408; border-color: #88d408; }
.wpfc-sticky-notification .sticky-common-banner .visual { display:block }
.wpfc-sticky-notification .sticky-common-banner .main-cta { padding: 16px; margin: 24px; width: calc(100% - 32px); max-width: initial }
#wpfc-beta{
padding-right: 5px;
font-weight: bold;
color: red;
}
#deleteCron{
float:right;
margin-right:5px;
padding: 3px;
}
#deleteCron:hover{
background-color:#FAEBD7;
}
form.delete-line{
height: 100px;
width: 100%;
float: left;
}
form.delete-line .left{
width: 20%;
float: left;
}
form.delete-line .right{
width: 80%;
float: left;
}
form.delete-line .left .submit{
padding-top: 0;
float: left;
padding-left: 20px;
}
form.delete-line .left .submit input{
height: 65px;
width: 130px;
white-space: pre-line !important;
}
td div.revert:before{
font-family: "dashicons";
content: "\f531";
}
td div.revert{
width:16px;
height:16px;
vertical-align: middle;
margin: auto;
position:relative;
cursor:pointer;
-moz-border-radius: 3px 3px;
-webkit-border-radius: 3px 3px;
border-radius: 3px 3px;
border:1px solid #aaa;
background:#ddd;
padding:3px;
background-color: white;
}
td div.revert:hover{
border-color:#000;
background-color: white;
}
td div.revert:active{
background-color: #F5F5F5;
}
#revert-loader{
display: none;
background: rgba(255, 255, 255, .7) url(../images/loader.gif) no-repeat center;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9998;
}
.wpfc-loading-statics{
background-repeat: no-repeat;
background-image: url(../images/loader-statics.gif);
background-position: 0 0;
}
div.wpfc-loading-statics{
height: 16px;
}
p.wpfc-loading-statics{
background-position: 44px 6px;
height: 27px;
}
#wpfc-optimized-statics-reduction:not(.wpfc-loading-statics):after{
content: " KB";
}
#wpfc-statics-right ul li{
height:35px;
padding:0;
margin-bottom:15px;
width:150px;
}
#wpfc-statics-right ul:last-child{
padding-left: 10px;
}
#wpfc-statics-right ul:last-child li{
width: 220px;
height: auto;
}
span.deleteicon {
position: relative;
}
span.deleteicon input {
padding-right: 16px;
}
span.deleteicon span {
position: absolute;
display: block;
top: 0px;
right: 5px;
width: 16px;
height: 16px;
background: url("../images/search_reset.jpg") no-repeat scroll;
cursor: pointer;
}
span.deleteicon span.cleared {
background: none;
}
#wpfc-image-list-filter:-moz-focusring, #wpfc-image-per-page:-moz-focusring {
color: transparent;
text-shadow: 0 0 0 #000;
}
#buy-image-credit{
border: 1px solid;
color: white;
border-radius: 26px;
background-color: rgb(61, 207, 60);
cursor: pointer;
padding: 5px 15px;
margin-left: 5px;
}
.wpfc-exclude-rule-line{
float: left;
width: 100%;
height: 40px;
}
.wpfc-exclude-rule-line-left{
width: 100px;
float: left;
}
.wpfc-exclude-rule-line-middle{
/*width: 400px;*/
float: left;
}
.wpfc-exclude-rule-line-add, .wpfc-exclude-rule-line-delete{
float: left;
padding-top: 7px;
cursor: pointer;
width: 20px;
}
.wpfc-exclude-rule-line-delete{
display: none;
}
#integrationDiv {
display: block;
font-family: "Lucida Grande","Lucida Sans","Lucida Sans Unicode",Verdana,Tahoma,sans-serif;
font-size: 13px;
height: auto;
line-height: 18px;
max-height: 395px;
overflow-x: hidden;
overflow-y: auto;
padding: 0;
}
.wpfc-csp-item, .wpfc-timeout-item, .wpfc-exclude-item, .int-item{
background: url(data:image/gif;base64,R0lGODlhAQAkANUAAAAAAP/////+//38/fb19vX09fDv8Pr6+/n5+vb29/Hx8u/v8Pv8/Pn6+vLz8vv7+vj49/T08/Pz8vLy8f/+/v38/Pn4+PHw8P7+/v39/fv7+/j4+Pf39/b29vPz8/Hx8fDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACEALAAAAAABACQAAAYiwICAgsFkMpUBQ/M4IBqWDYST6BAKhYjHIZkoPp8LaGEIAgA7) repeat-x scroll center bottom transparent !important;
border: 1px solid #CCCCCC !important;
}
.wpfc-csp-item:hover, .wpfc-timeout-item:hover, .wpfc-exclude-item:hover, .int-item:hover{
border:1px solid #ccc;
background:#f5f5f5 none repeat scroll 0 0 !important;
}
.int-item, .wpfc-timeout-item, .wpfc-exclude-item, .wpfc-csp-item {
border-radius: 6px;
cursor: pointer;
margin-bottom: 7px;
overflow: hidden;
padding: 12px;
float: left;
width: 328.5px;
}
.int-item{
padding: 12px 8px 12px 12px !important;
}
.int-item-left{
margin-right: 7px;
}
.int-item:hover {
background: none repeat scroll 0 0 rgba(135, 135, 135, 0.1);
}
.int-item h2 {
font-size: 14px;
margin: 0 0 3px;
}
.int-item p {
color: #666;
font-size: 11px;
margin: 0;
position: relative;
padding-top: 3px;
}
.int-item img {
float: left;
margin-right: 12px;
height: 45px;
width: 45px;
}
.int-item .meta.isConnected{
background-image: url("../images/success.svg");
background-repeat: no-repeat;
background-size: 24px;
background-position: right;
height: 24px;
width: 100%;
max-width: 100%;
position: relative;
top: -10px;
}
.int-item .meta.isConnected.pause{
background-image: url("../images/pause.svg");
}
.int-item .meta.success{
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADb0lEQVQ4Ea2VS0iUURTH7+v7dAwnLMhWjURRm4IeOtEmS4VQ6GFNUYFG+UCooDYlBAktCqIXRVEUvaggqVQoNzallGiboKIWvSha5MLSMZ2Z7746Z9JptLEHdQbmu9+95/+7595z7v0oSWOFDUTkFqwKTPQ7Qa7oIkN4kFIzw1r2mhHdrYXt6o/I7p7HTe8fNBA1FkHHdmxoXpHrnzhhCyV2D+PUT+xYD3gHldYmYik5MNAXvXB9ZUtPqlcqlFa1rZgjfFlHBeXLrDbEpgMOqykoKWdEWR1W0aGd54pbnsFQQpGEbutcOcdY3yXhOPNU7KcVpQYyqi0yBVFSPmE0WnlycTOCCcO/iraiyVq5J/4WiNuAAaAO9chBHi9sKBRT8qbucFyxVXsa+/7YDCGSc8q1hFQKkUeJ+yU770UXCxQEApzZPVb9YgPTTGOs7pADg8VK6lbmMIJ6anl9oKAywLL8Q0EmqN+mTfMYGiYHNsxa0zlg1KbzZS0dWulTylNR3EgOnAQPZggSWEfSQMgEeCRTODyC/ZBto02n9syGq0tvfaxuK893MsRexxE+a2ClwEEes8RZlArEtpbqHQaOZZMweHKYSEr5SA9GKs6WNH6oC4cWOBnuKeGKoFY/okIeA+pMFFL4WQNxKHLwq+eVgeMRjBb7OUQoY/FL8Z6va8+Wtr6pvR9aDrPcgOQsVPHRyUUeM5S8QqilFjNIldFPr5Tcfhnvj++HU3NG+DiRnursj3i7L667+6nmQflSSukx7rLpWo4GIgd5jBLZhS+4XAuHG4I6VNu+rvTi6qY+1RfdFx2M74qrWDUexar20DLGxEnhOrMMlFE6Qx6texjaSIm4OpIsyikxnuqF81d5uqTxDgmFOGls1FXhNaWCu4eFw2ablD0cBcbKIGoTG4pkdRtlI7h3aFZDvTl8MnHFlZpwqAz7ajrWz3eFOO644wNRr4GDPJ4zM2cgZ1q2FS4rSpRFggwJYsQH1Vy8IJ9FBaX13BFz8eSMZ1iGkOWGt4+utSbCwzM7wZ1008nMXJJ6meDszMWqgASMt2SYBS8VGYu1D3qf11wuvtcLu0AINrjwtuNtgw4jhqcMCv23QNShHjmoTUCxAdfWcy86tNmTMoxLSRY+DqYxHEc/9Ecd6kfcvmdn5A2e//vmT6L/9Rv1DasAwJ2jW2dLAAAAAElFTkSuQmCC') no-repeat scroll 0 0;
height: 21px;
width: 21px;
position: relative;
top: -8px;
left: 312px;
}
.int-item .meta.warning{
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlpJREFUOBGtlb9vE1EMx+333p3aQg8BAhYoUtOOHahEErEASf+ADjCDkGBjYGPsxsjABgNiAgmGDpVYmkIWlDCEASYKrfixAAKhS9JWee+esSNdiAJpSYKnnJ+/n/Pz2Q7CX+zZOTAZdeakUZM5giSPSuUQcIaA3pH3VQRdcb5efe9ffDj/HFwvAnsdG8XcsQl98AoDbiqFEcEfIewh8J5iDcmtRlK/P12qfunmdCtwo1ic2xeEtw1iISEWdkf2/Fb8rBHBEa01bevGdKn0ml0kYR3op4WFuXFjHiDqU5Z2w4nstwWogCh5te3cpROrqwIGeSF8LmYPBwrvDAoUrSQgOtELR3xqCcAYfehaYMKzg2Qo4tREJ3qD0VX5yPixUMgEQVjTSkWe6zisKa5v4n1sbWveGBXkuOCRTxLm/Xste1/uuZKSGDHPgPI5cWAUAR49wgXRHD9IxvytfQL09Rv4RoP1nqGEeRwbg+DiBQgXFwGDcGAo2Ra0lpfBPnwE0GzmuSVpFib3g56fb9+Itrd6b7b3szFtvV1ZAdxqzBoiXId6I5vUaqCnpgDHJ4bKVPTM4Z7FdQNIFdrZydrHT8CVyyPVlDk8TlQx4FVV8Qj4OAaKf+591b4RChSDPPOM87aKFMZaa+7T9oD1le12kPap8PSBzc366cwMGa2KozS/kSydXXqblJ7KmDqX/LhrXassy2EYE53oHcX3ZL+2KcdLL79bT9dl2wwKTreU6IUjSXVS47X1hgf3siO/FvAcdw76pC7nEifxohN9GtrZp6njf2/+lAuj/kf9ArVlQDDNYNOoAAAAAElFTkSuQmCC') no-repeat scroll 0 0;
height: 21px;
width: 21px;
position: relative;
top: -8px;
left: 312px;
}
.int-item .app {
float: left;
/*padding-right: 10px;*/
width: 75%;
}
.int-item .app .more-info {
cursor: auto;
float: none;
height: auto;
margin-left: 10px;
width: auto;
}
.int-item .meta {
font-size: 11px;
font-weight: bold;
max-width: 100px;
text-align: right;
}
.int-item .meta .developer {
color: #333333;
display: block;
}
#wpfc-premium-container{
overflow: hidden;
}
.wpfc-premium-step{
width: 246px;
float: left;
margin-left: 3px;
}
.wpfc-premium-step div{
float: left !important;
}
.wpfc-premium-step-header{
width: 100%;
background-color: rgb(58, 158, 235);
padding-top: 12px;
padding-bottom: 11px;
text-align: center;
}
.wpfc-premium-step-header label{
font-size: 17pt !important;
color: white !important;
font-weight: normal !important;
margin-bottom: 0 !important;
}
.wpfc-premium-step-content{
font-size: 16px !important;
line-height: 20px !important;
padding-top: 25px !important;
padding-left: 25px !important;
height: 100px;
}
.wpfc-premium-step-footer p{
font-size: 15px !important;
}
.wpfc-premium-step-footer ul li{
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAYAAACXtf2DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNDgwMTE3NDA3MjA2ODExOEMxNEJENkJCQTMxQTY0OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowNDA0MUQ4RTAxMjUxMUUzQUNBOEExQjA5MUZCRkI2OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNDA0MUQ4RDAxMjUxMUUzQUNBOEExQjA5MUZCRkI2OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjYzNDYwOTkyMEYyMDY4MTE4NzFGQ0NDRDhCOTMyRDhEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA0ODAxMTc0MDcyMDY4MTE4QzE0QkQ2QkJBMzFBNjQ5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+U7CKjQAAAX1JREFUeNpiZFj/gYES8D+AH85m3PBREEj1AbEHEO8E4kIWBioBoOEaQGoBEJtDheKB+AcLlQx3AVKrgVgATSqCiQqGRwOpTVgMB4HjlFqQAcRLgJgTi9wXIC6hxIIqIJ6OR74AmACukmtBJRC34pGfDTR8LohBjgVlQNyGR/44EGfCODALhIHYFYj5CBheDMSdeOTvA3EI0PV/kS0wAOKTQLwLShvj0AxyVQ8ew0GRGg40/BmyIMiCSUCsDOWDMstmIFZH0xwHxNMI+C4KaPhpdEGQBWpoYpJAvAWIZaD8UCBeSMDwOKDhm7FJgCyYh0VcBYg3AHENEK8gYHgR0PDFODMisLADZZJj0LggFYDS+kR8CkA++A7ECVCaFJAPxBMJKYIl04tAnEiC4enQxMFArAUgsBKImwmo/woqIYF4FrEuQc/JdUC8DIfat0DsA3UIA7kWwCqKPWhiR4HYBIgPkJoKsFnwB4jDgHg5EL8A4jlA7A3ED8gpFQECDADtslAckBdkiwAAAABJRU5ErkJggg==") no-repeat scroll 0 2px transparent;
padding: 3px 30px;
font-size: 15px;
}
.wpfc-premium-step-footer{
padding-left: 25px;
}
.wpfc-premium-step-image{
width: 100%;
height: 180px;
text-align: center;
}
.wpfc-form-spinner, .wpfc-form-spinner-input-td, .wpfc-form-spinner-number, .wpfc-form-spinner-up, .wpfc-form-spinner-down{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}
.exclude_section_clear {
background: none;
border-bottom: 1px solid #e6e6e6;
clear: both;
float: left;
marig-left: 1px;
margin-bottom: 0px;
margin-top: 16px;
overflow: auto;
position: relative;
width: 97%;
}
.error-wpfc{
border-color: #D8000C !important;
color: #D8000C !important;
background: #FFBABA url("") no-repeat 10px !important;
}
.success-wpfc, .error-wpfc{
background-position: 10px center !important;
padding-bottom: 5px !important;
padding-top: 5px !important;
}
.success-wpfc{
border-color: #4F8A10 !important;
color: #4F8A10 !important;
background: #DFF2BF url("") no-repeat 10px !important;
}
.success-wpfc p, .error-wpfc p{
padding: 2px 2px 2px 0px !important;
}
/* input[type=checkbox]:checked:before { color: #e14d43;} */

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1 @@
Silence is golden.

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

View File

@@ -0,0 +1,3 @@
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Capa_1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path id="XMLID_148_" d="M 12 0 C 5.373 0 0 5.373 0 12 C 0 18.627 5.373 24 12 24 C 18.627 24 24 18.627 24 12 C 23.999 5.373 18.627 0 12 0 Z M 11 15.639 C 11 16.136 10.597 16.539 10.099 16.539 C 9.602 16.539 9.199 16.136 9.199 15.639 L 9.199 8.837 C 9.199 8.339 9.602 7.937 10.099 7.937 C 10.597 7.937 11 8.339 11 8.837 L 11 15.639 Z M 14.8 15.639 C 14.8 16.136 14.398 16.539 13.9 16.539 C 13.403 16.539 13 16.136 13 15.639 L 13 8.837 C 13 8.339 13.403 7.937 13.9 7.937 C 14.398 7.937 14.8 8.339 14.8 8.837 L 14.8 15.639 Z" style="fill: rgb(242, 132, 0);"/>
</svg>

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="800px" height="800px" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zm2.72 5.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-2-2a.75.75 0 011.06-1.06l1.47 1.47 3.97-3.97z" clip-rule="evenodd" style="fill: rgb(120, 187, 6);"/>
</svg>

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,131 @@
<?php
class WpFastestCacheAdminToolbar{
private $is_multi = false;
public function __construct($is_multi){
$this->is_multi = $is_multi;
}
public function add(){
if(is_admin()){
add_action('wp_before_admin_bar_render', array($this, "wpfc_tweaked_toolbar_on_admin_panel"));
add_action('admin_enqueue_scripts', array($this, 'load_toolbar_js'));
add_action('admin_enqueue_scripts', array($this, 'load_toolbar_css'));
add_action('wp_print_scripts', array($this, 'print_my_inline_script'));
}else{
if(is_admin_bar_showing()){
add_action('wp_before_admin_bar_render', array($this, "wpfc_tweaked_toolbar_on_frontpage"));
add_action('wp_enqueue_scripts', array($this, 'load_toolbar_js'));
add_action('wp_enqueue_scripts', array($this, 'load_toolbar_css'));
add_action('wp_footer', array($this, 'print_my_inline_script'));
}
}
}
public function load_toolbar_js(){
wp_enqueue_script("wpfc-toolbar", plugins_url("wp-fastest-cache/js/toolbar.js"), array('jquery'), time(), true);
}
public function load_toolbar_css(){
wp_enqueue_style("wp-fastest-cache-toolbar", plugins_url("wp-fastest-cache/css/toolbar.css"), array(), time(), "all");
}
public function print_my_inline_script() {
$script = "
var wpfc_ajaxurl = '" . admin_url('admin-ajax.php') . "';
var wpfc_nonce = '" . wp_create_nonce("wpfc") . "';
";
echo wp_print_inline_script_tag($script);
}
public function wpfc_tweaked_toolbar_on_frontpage() {
global $wp_admin_bar;
$wp_admin_bar->add_node(array(
'id' => 'wpfc-toolbar-parent',
'title' => 'WP Fastest Cache',
'href' => admin_url( 'admin.php?page=wpfastestcacheoptions')
));
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-clear-cache-of-this-page',
'title' => 'Clear Cache of This Page',
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-delete-cache',
'title' => __("Clear All Cache", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-delete-cache-and-minified',
'title' => 'Clear Cache and Minified CSS/JS',
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
if($this->is_multi){
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-clear-cache-of-allsites',
'title' => __("Clear Cache of All Sites", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
}
}
public function wpfc_tweaked_toolbar_on_admin_panel() {
global $wp_admin_bar;
$wp_admin_bar->add_node(array(
'id' => 'wpfc-toolbar-parent',
'title' => 'WP Fastest Cache',
'href' => admin_url( 'admin.php?page=wpfastestcacheoptions')
));
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-delete-cache',
'title' => __("Clear All Cache", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-delete-cache-and-minified',
'title' => __("Clear Cache and Minified CSS/JS", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
if($this->is_multi){
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-clear-cache-of-allsites',
'title' => __("Clear Cache of All Sites", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
}
if(isset($_GET["page"]) && $_GET["page"] == "wpfastestcacheoptions"){
$wp_admin_bar->add_menu( array(
'id' => 'wpfc-toolbar-parent-settings',
'title' => __("Toolbar Settings", "wp-fastest-cache"),
'parent'=> 'wpfc-toolbar-parent',
'href' => '#',
'meta' => array("class" => "wpfc-toolbar-child")
));
}
}
}
?>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,651 @@
<?php
class CdnWPFC{
public static function cloudflare_generate_header($email, $key){
if($email == "wpfc"){
$header = array(
"Authorization" => "Bearer ".$key,
"Content-Type" => "application/json"
);
}else{
$header = array(
"X-Auth-Email" => $email,
"X-Auth-Key" => $key,
"Content-Type" => "application/json"
);
}
return $header;
}
public static function cloudflare_clear_cache($email = false, $key = false, $zoneid = false){
if(isset($GLOBALS["wpfc_cloudflare_purge_cache_executed"])){
return;
}
if(!$key && !$zoneid){
if($cdn_values = get_option("WpFastestCacheCDN")){
$std_obj = json_decode($cdn_values);
foreach ($std_obj as $key => $value) {
if($value->id == "cloudflare"){
$email = $value->cdnurl;
$key = $value->originurl;
break;
}
}
if($key){
$zone = self::cloudflare_get_zone_id($email, $key, false);
if($zone["success"]){
$zoneid = $zone["zoneid"];
}
}
}
}
if($key && $zoneid){
$header = array("method" => "DELETE",
'headers' => self::cloudflare_generate_header($email, $key),
"body" => '{"purge_everything":true}'
);
$response = wp_remote_request('https://api.cloudflare.com/client/v4/zones/'.$zoneid.'/purge_cache', $header);
if(!$response || is_wp_error($response)){
return array("success" => false, "error_message" => "Unable to disable rocket loader option");
}else{
$body = json_decode(wp_remote_retrieve_body($response));
if(!$body->success){
CdnWPFC::cloudflare_delete_zone_id_value();
}else{
$GLOBALS["wpfc_cloudflare_purge_cache_executed"] = true;
}
}
}
}
public static function cloudflare_disable_rocket_loader($email = false, $key = false, $zoneid = false){
if($key && $zoneid){
$header = array("method" => "PATCH",
'timeout' => 10,
'headers' => self::cloudflare_generate_header($email, $key),
'body' => '{"value":"off"}'
);
$response = wp_remote_request('https://api.cloudflare.com/client/v4/zones/'.$zoneid.'/settings/rocket_loader', $header);
if(!$response || is_wp_error($response)){
return array("success" => false, "error_message" => "Unable to disable rocket loader option");
}else{
$body = json_decode(wp_remote_retrieve_body($response));
if($body->success){
return array("success" => true);
}else if(isset($body->errors) && isset($body->errors[0])){
return array("success" => false, "error_message" => $body->errors[0]->message);
}else{
return array("success" => false, "error_message" => "Unknown error: 101");
}
}
return array("success" => false, "error_message" => "Unknown error");
}
}
public static function cloudflare_set_browser_caching($email = false, $key = false, $zoneid = false){
if($key && $zoneid){
$header = array("method" => "PATCH",
'timeout' => 10,
'headers' => self::cloudflare_generate_header($email, $key),
'body' => '{"value":16070400}'
);
$response = wp_remote_request('https://api.cloudflare.com/client/v4/zones/'.$zoneid.'/settings/browser_cache_ttl', $header);
if(!$response || is_wp_error($response)){
return array("success" => false, "error_message" => "Unable to set the browser caching option");
}else{
$body = json_decode(wp_remote_retrieve_body($response));
if($body->success){
return array("success" => true);
}else if(isset($body->errors) && isset($body->errors[0])){
return array("success" => false, "error_message" => $body->errors[0]->message);
}else{
return array("success" => false, "error_message" => "Unknown error: 101");
}
}
return array("success" => false, "error_message" => "Unknown error");
}
}
public static function cloudflare_disable_minify($email = false, $key = false, $zoneid = false){
// Deprecated
// https://developers.cloudflare.com/speed/optimization/content/auto-minify/
return array("success" => true);
if($key && $zoneid){
$header = array("method" => "PATCH",
'timeout' => 10,
'headers' => self::cloudflare_generate_header($email, $key),
'body' => '{"value":{"css":"off","html":"off","js":"off"}}'
);
$response = wp_remote_request('https://api.cloudflare.com/client/v4/zones/'.$zoneid.'/settings/minify', $header);
if(!$response || is_wp_error($response)){
return array("success" => false, "error_message" => "Unable to disable minify options");
}else{
$body = json_decode(wp_remote_retrieve_body($response));
if($body->success){
return array("success" => true);
}else if(isset($body->errors) && isset($body->errors[0])){
return array("success" => false, "error_message" => $body->errors[0]->message);
}else{
return array("success" => false, "error_message" => "Unknown error: 101");
}
}
return array("success" => false, "error_message" => "Unknown error");
}else{
wp_die("bad request");
}
}
public static function cloudflare_get_zone_id($email = false, $key = false){
$cache_zone_id = CdnWPFC::cloudflare_get_zone_id_value();
if($cache_zone_id){
return $cache_zone_id;
}
if(substr_count($_SERVER["HTTP_HOST"], ".") == 1){
$hostname = preg_replace("/^(https?\:\/\/)/", "", $_SERVER["HTTP_HOST"]);
}else{
$hostname = preg_replace("/^(https?\:\/\/)?(www\d*\.)?/", "", $_SERVER["HTTP_HOST"]);
}
if(extension_loaded('intl') && function_exists("idn_to_utf8")){
$hostname = idn_to_utf8($hostname);
}
$header = array(
"method" => "GET",
'headers' => self::cloudflare_generate_header($email, $key)
);
$all_zones = [];
// Request page 1 and page 2
for ($page = 1; $page <= 2; $page++) {
$response = wp_remote_request("https://api.cloudflare.com/client/v4/zones/?page=$page&per_page=1000", $header);
if (!$response || is_wp_error($response)) {
return array("success" => false, "error_message" => $response->get_error_message());
}
$zone = json_decode(wp_remote_retrieve_body($response));
if (isset($zone->errors) && isset($zone->errors[0])) {
$error_message = $zone->errors[0]->message;
if (isset($zone->errors[0]->error_chain[0])) {
$error_message = $zone->errors[0]->error_chain[0]->message;
}
return array("success" => false, "error_message" => $error_message);
}
if (isset($zone->result)) {
$all_zones = array_merge($all_zones, $zone->result);
}
}
// Search for the matching zone
foreach ($all_zones as $zone_value) {
if (preg_match("/" . preg_quote($zone_value->name, '/') . "/", $hostname)) {
$res = array(
"success" => true,
"zoneid" => $zone_value->id,
"plan" => $zone_value->plan->legacy_id
);
CdnWPFC::cloudflare_save_zone_id_value($res);
return $res;
}
}
return array("success" => false, "error_message" => "No zone name " . $hostname);
}
public static function cloudflare_get_zone_id_value(){
if($data = get_option("WpFastestCacheCDN")){
$arr = json_decode($data);
if(is_array($arr)){
foreach ($arr as $cdn_key => $cdn_value) {
if($cdn_value->id == "cloudflare" && isset($cdn_value->zone_id)){
return unserialize($cdn_value->zone_id);
}
}
}
}
return false;
}
public static function cloudflare_delete_zone_id_value(){
if($data = get_option("WpFastestCacheCDN")){
$arr = json_decode($data);
if(is_array($arr)){
foreach ($arr as $cdn_key => $cdn_value) {
if($cdn_value->id == "cloudflare"){
if(isset($cdn_value->zone_id)){
unset($cdn_value->zone_id);
}
}
}
update_option("WpFastestCacheCDN", json_encode($arr));
}
}
}
public static function cloudflare_save_zone_id_value($value){
if($data = get_option("WpFastestCacheCDN")){
$arr = json_decode($data);
if(is_array($arr)){
foreach ($arr as $cdn_key => &$cdn_value) {
if($cdn_value->id == "cloudflare"){
$value["time"] = time();
$cdn_value->zone_id = serialize($value);
}
}
update_option("WpFastestCacheCDN", json_encode($arr));
}
}
}
public static function cloudflare_remove_webp(){
$path = ABSPATH.".htaccess";
if(file_exists($path)){
if(is_writable($path)){
$htaccess = file_get_contents($path);
$htaccess = preg_replace("/#\s?BEGIN\s?WEBPWpFastestCache.*?#\s?END\s?WEBPWpFastestCache/s", "", $htaccess);
file_put_contents($path, $htaccess);
}
}
}
public static function cloudflare_change_settings(){
//admin OR author OR editor
if(current_user_can('manage_options') || current_user_can('delete_published_posts') || current_user_can('edit_published_posts')){
if(isset($_GET["url"]) && isset($_GET["origin_url"])){
$email = sanitize_text_field($_GET["url"]);
$key = sanitize_text_field($_GET["origin_url"]);
}
$zone = CdnWPFC::cloudflare_get_zone_id($email, $key);
if($zone["success"]){
$minify = CdnWPFC::cloudflare_disable_minify($email, $key, $zone["zoneid"]);
$rocket_loader = CdnWPFC::cloudflare_disable_rocket_loader($email, $key, $zone["zoneid"]);
$purge_cache = CdnWPFC::cloudflare_clear_cache($email, $key, $zone["zoneid"]);
$browser_caching = CdnWPFC::cloudflare_set_browser_caching($email, $key, $zone["zoneid"]);
if($zone["plan"] == "free"){
CdnWPFC::cloudflare_remove_webp();;
}
if($minify["success"]){
if($rocket_loader["success"]){
if($browser_caching["success"]){
$res = array("success" => true);
}else{
$res = array("success" => false, "error_message" => $browser_caching["error_message"]);
}
}else{
$res = array("success" => false, "error_message" => $rocket_loader["error_message"]);
}
}else{
$res = array("success" => false, "error_message" => $minify["error_message"]);
}
}else{
$res = $zone;
}
wp_send_json($res);
}else{
wp_die("Must be admin");
}
}
public static function check_url(){
if(current_user_can('manage_options')){
if(isset($_GET["type"]) && $_GET["type"] == "cloudflare"){
CdnWPFC::cloudflare_change_settings();
}
if(preg_match("/wp\.com/", $_GET["url"]) || $_GET["url"] == "random"){
wp_send_json(array("success" => true));
}
if(
// IPv6
preg_match("/\:\:/", $_GET["url"]) ||
// decimal
(preg_match("/\d{10}/", $_GET["url"]) && !preg_match("/\./", $_GET["url"])) ||
// hex
(preg_match("/0x[0-9a-fA-F]{1,8}/", $_GET["url"]) && !preg_match("/\./", $_GET["url"])) ||
preg_match("/0x[0-9a-fA-F]{1,2}\.0x[0-9a-fA-F]{1,2}\.0x[0-9a-fA-F]{1,2}\.0x[0-9a-fA-F]{1,2}/", $_GET["url"]) ||
// octal
preg_match("/(https?\:\/\/)?[0-9]{4,5}\.[0-9]{1,5}\.[0-9]{1,5}\.[0-9]{1,5}/", $_GET["url"]) ||
// localhost
preg_match("/(\/\/)?localhost/i", $_GET["url"]) ||
preg_match("/(https?\:\/\/)?(127|10|172|169|100|198|192)\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $_GET["url"])
){
$res = array("success" => false, "error_message" => "Localhost is not allowed");
wp_send_json($res);
}
$host = str_replace("www.", "", $_SERVER["HTTP_HOST"]);
$_GET["url"] = esc_url_raw($_GET["url"]);
if(!preg_match("/^http/", $_GET["url"])){
$_GET["url"] = "http://".$_GET["url"];
}
if(preg_match("/^https/i", site_url()) && preg_match("/^https/i", home_url())){
$_GET["url"] = preg_replace("/http\:\/\//i", "https://", $_GET["url"]);
}
$response = wp_safe_remote_get($_GET["url"], array('timeout' => 20, 'redirection' => 0, 'user-agent' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"));
$header = wp_remote_retrieve_headers($response);
if ( !$response || is_wp_error( $response ) ) {
$res = array("success" => false, "error_message" => esc_html($response->get_error_message()) );
if($response->get_error_code() == "http_request_failed"){
if(esc_html($response->get_error_message()) == "Failure when receiving data from the peer"){
$res = array("success" => true);
}else if(preg_match("/cURL\serror\s60/i", esc_html($response->get_error_message()) )){
//cURL error 60: SSL: no alternative certificate subject name matches target host name
$res = array("success" => false, "error_message" => "<a href='https://www.wpfastestcache.com/warnings/how-to-use-cdn-on-ssl-sites/' target='_blank'>Please Read: https://www.wpfastestcache.com/warnings/how-to-use-cdn-on-ssl-sites/</a>");
}else if(preg_match("/cURL\serror\s6/i", esc_html($response->get_error_message()) )){
//cURL error 6: Couldn't resolve host
if(preg_match("/".preg_quote($host, "/")."/i", $_GET["url"])){
$res = array("success" => true);
}
}
}
}else{
$response_code = wp_remote_retrieve_response_code( $response );
if($response_code == 200){
$res = array("success" => true);
}else{
if (is_object($response) && method_exists($response, "get_error_message")) {
$res = array("success" => false, "error_message" => esc_html($response->get_error_message()) );
}else{
$res = array("success" => false, "error_message" => esc_html(wp_remote_retrieve_response_message($response)) );
}
if(isset($header["server"]) && preg_match("/squid/i", $header["server"])){
$res = array("success" => true);
}
if(($response_code == 400) && (preg_match("/speedsize\.com/i", $_GET["url"]))){
$res = array("success" => true);
}
if(($response_code == 401) && (preg_match("/res\.cloudinary\.com/i", $_GET["url"]))){
$res = array("success" => true);
}
if(($response_code == 403) && (preg_match("/stackpathdns\.com/i", $_GET["url"]))){
$res = array("success" => true);
}
if(($response_code == 403) && (preg_match("/cloudfront\.net/i", $_GET["url"]))){
$res = array("success" => false, "error_message" => "<a href='https://www.wpfastestcache.com/blog/how-to-fix-403-access-denied-errors-during-cdn-integration/#wpft-amazon-cloudfront' target='_blank'>Please Read: Amazon CloudFront 403 Error</a>");
}
if(($response_code == 403) && (preg_match("/b\-cdn\.net/i", $_GET["url"]))){
$res = array("success" => false, "error_message" => "<a href='https://www.wpfastestcache.com/blog/how-to-fix-403-access-denied-errors-during-cdn-integration/#wpft-bunny-cdn' target='_blank'>Please Read: BunnyCDN 403 Error</a>");
}
}
}
wp_send_json($res);
}else{
wp_die("Must be admin");
}
}
public static function cdn_options(){
if(current_user_can('manage_options')){
$cdn_values = get_option("WpFastestCacheCDN");
if($cdn_values){
echo $cdn_values;
}else{
echo json_encode(array("success" => false));
}
exit;
}else{
wp_die("Must be admin");
}
}
public static function start_cdn_integration(){
if(current_user_can('manage_options')){
$cdn_values = get_option("WpFastestCacheCDN");
if($cdn_values){
$std_obj = json_decode($cdn_values);
$cdn_values_arr = array();
if(is_array($std_obj)){
$cdn_values_arr = $std_obj;
}else{
array_push($cdn_values_arr, $std_obj);
}
foreach ($cdn_values_arr as $cdn_key => $cdn_value) {
if($cdn_value->id == "amazonaws" || $cdn_value->id == "keycdn" || $cdn_value->id == "cdn77"){
$cdn_value->id = "other";
}
if($cdn_value->id == $_POST["id"]){
unset($cdn_value->status);
}
}
$cdn_values_arr = array_values($cdn_values_arr);
update_option("WpFastestCacheCDN", json_encode($cdn_values_arr));
}
echo json_encode(array("success" => true));
exit;
}else{
wp_die("Must be admin");
}
}
public static function pause_cdn_integration(){
if(current_user_can('manage_options')){
$cdn_values = get_option("WpFastestCacheCDN");
if($cdn_values){
$std_obj = json_decode($cdn_values);
$cdn_values_arr = array();
if(is_array($std_obj)){
$cdn_values_arr = $std_obj;
}else{
array_push($cdn_values_arr, $std_obj);
}
foreach ($cdn_values_arr as $cdn_key => $cdn_value) {
if($cdn_value->id == "amazonaws" || $cdn_value->id == "keycdn" || $cdn_value->id == "cdn77"){
$cdn_value->id = "other";
}
if($cdn_value->id == $_POST["id"]){
$cdn_value->status = "pause";
}
}
$cdn_values_arr = array_values($cdn_values_arr);
update_option("WpFastestCacheCDN", json_encode($cdn_values_arr));
}
echo json_encode(array("success" => true));
exit;
}else{
wp_die("Must be admin");
}
}
public static function remove_cdn_integration(){
if(current_user_can('manage_options')){
$cdn_values = get_option("WpFastestCacheCDN");
if($cdn_values){
$std_obj = json_decode($cdn_values);
$cdn_values_arr = array();
if(is_array($std_obj)){
$cdn_values_arr = $std_obj;
}else{
array_push($cdn_values_arr, $std_obj);
}
foreach ($cdn_values_arr as $cdn_key => $cdn_value) {
if($cdn_value->id == "amazonaws" || $cdn_value->id == "keycdn" || $cdn_value->id == "cdn77"){
$cdn_value->id = "other";
}
if($cdn_value->id == $_POST["id"]){
unset($cdn_values_arr[$cdn_key]);
}
}
$cdn_values_arr = array_values($cdn_values_arr);
}
if(count($cdn_values_arr) > 0){
update_option("WpFastestCacheCDN", json_encode($cdn_values_arr));
}else{
delete_option("WpFastestCacheCDN");
}
echo json_encode(array("success" => true));
exit;
}else{
wp_die("Must be admin");
}
}
public static function cdn_template(){
if(current_user_can('manage_options')){
if($_POST["id"] == "maxcdn"){
$path = WPFC_MAIN_PATH."templates/cdn/maxcdn.php";
}else if($_POST["id"] == "other"){
$path = WPFC_MAIN_PATH."templates/cdn/other.php";
}else if($_POST["id"] == "cloudflare"){
$path = WPFC_MAIN_PATH."templates/cdn/cloudflare.php";
}else{
die("Wrong cdn");
}
ob_start();
include_once($path);
$content = ob_get_contents();
ob_end_clean();
$res = array("success" => false, "content" => "");
if($data = @file_get_contents($path)){
$res["success"] = true;
$res["content"] = $content;
}
echo json_encode($res);
exit;
}else{
wp_die("Must be admin");
}
}
public static function save_cdn_integration(){
if(current_user_can('manage_options') && wp_verify_nonce($_POST["nonce"], "cdn-nonce")){
$values = array();
if(isset($_POST) && isset($values)){
foreach ($_POST["values"] as $val_key => $val_value) {
$values[$val_key] = sanitize_text_field($val_value);
}
}
if($data = get_option("WpFastestCacheCDN")){
$cdn_exist = false;
$arr = json_decode($data);
if(is_array($arr)){
foreach ($arr as $cdn_key => &$cdn_value) {
if($cdn_value->id == $values["id"]){
$cdn_value = $values;
$cdn_exist = true;
}
}
if(!$cdn_exist){
array_push($arr, $values);
}
update_option("WpFastestCacheCDN", json_encode($arr));
}else{
$tmp_arr = array();
if($arr->id == $values["id"]){
array_push($tmp_arr, $values);
}else{
array_push($tmp_arr, $arr);
array_push($tmp_arr, $values);
}
update_option("WpFastestCacheCDN", json_encode($tmp_arr));
}
}else{
$arr = array();
array_push($arr, $values);
add_option("WpFastestCacheCDN", json_encode($arr), null, "yes");
}
echo json_encode(array("success" => true));
exit;
}else{
wp_die("Must be admin");
}
}
}
?>

View File

@@ -0,0 +1,118 @@
<?php
class ClearingSpecificPagesWPFC{
public static function remove(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-save-csp-ajax-nonce')){
die( 'Security check' );
}
$_POST["order"] = sanitize_text_field($_POST["order"]);
$urls = get_option("WpFastestCacheCSP");
if(!empty($urls)){
foreach ($urls as $key => $value) {
if($value->order == ($_POST["order"])){
unset($urls[$key]);
}
}
}
if(empty($urls)){
delete_option("WpFastestCacheCSP");
}else{
update_option("WpFastestCacheCSP", $urls, 1, "no");
}
wp_send_json_success();
}
public static function check_url(){
$home_url = parse_url(get_option("home"), PHP_URL_HOST);
$specific_url = parse_url($_POST["url"], PHP_URL_HOST);
if($home_url == $specific_url){
return true;
}
return false;
}
public static function check_wild_card(){
if(preg_match("/[^\/]\(\.\*\)/", $_POST["url"])){
return false;
}
if(substr_count($_POST["url"], "(.*)") > 1){
return false;
}
return true;
}
public static function save(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-save-csp-ajax-nonce')){
die( 'Security check' );
}
if(!self::check_url()){
wp_send_json_error("The URL must start with ".parse_url(get_option("home"), PHP_URL_SCHEME)."//".parse_url(get_option("home"), PHP_URL_HOST));
}
if(!self::check_wild_card()){
wp_send_json_error("Wrong Wild Card Usage");
}
if(preg_match("/\.{2,}/", $_POST["url"])){
wp_send_json_error("May be Directory Traversal Attack");
}
$_POST["url"] = sanitize_url($_POST["url"]);
$_POST["order"] = sanitize_text_field($_POST["order"]);
$urls = get_option("WpFastestCacheCSP");
$url = (object)array("url" => $_POST["url"], "order" => $_POST["order"]);
if(!is_array($urls)){
$urls = array();
array_push($urls, $url);
add_option("WpFastestCacheCSP", $urls, 1, "no");
}else{
$is_update = false;
foreach ($urls as $key => &$value) {
if($value->order == ($_POST["order"])){
$is_update = true;
$value->url = $_POST["url"];
}
}
if(!$is_update){
array_push($urls, $url);
}
update_option("WpFastestCacheCSP", $urls, 1, "no");
}
wp_send_json_success();
}
public static function get_list(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-save-csp-ajax-nonce')){
die( 'Security check' );
}
$urls = get_option("WpFastestCacheCSP");
if(!is_array($urls)){
$urls = array();
}
wp_send_json_success($urls);
}
}
?>

View File

@@ -0,0 +1,86 @@
<?php
/**
* WP-CLI commands for WP Fastest Cache.
*/
if(!defined('ABSPATH')){
exit;
}
// This is a WP-CLI command, so bail if it's not available.
if(!defined('WP_CLI')){
return;
}
class wpfcCLI extends \WP_CLI_Command
{
/**
* Clears the cache.
*
* ## EXAMPLES
* wp fastest-cache clear all
* wp fastest-cache clear all and minified
*
*
* @subcommand clear
*
* @param array $args Args.
* @param array $args_assoc Associative args.
*
* @return void
*/
public function wrong_usage(){
$message = array("*************************************************************************",
"* Wrong usage! *",
"* Please read: https://www.wpfastestcache.com/features/wp-cli-commands/ *",
"*************************************************************************");
WP_CLI::error_multi_line($message);
}
public function clear($args, $args_assoc){
if(isset($GLOBALS['wp_fastest_cache'])){
if(method_exists($GLOBALS['wp_fastest_cache'], 'deleteCache')){
if(isset($args_assoc["post_id"])){
$post_ids = explode(',' , $args_assoc['post_id'] );
foreach($post_ids as $post_id){
WP_CLI::line("Clearing the cache of the post with ID number ".$post_id);
$GLOBALS['wp_fastest_cache']->singleDeleteCache(false, $post_id);
WP_CLI::success("The cache has been cleared!");
}
}else if(isset($args[0])){
if($args[0] == "all"){
if(isset($args[1]) && isset($args[2])){
if($args[1] == "and" && $args[2] == "minified"){
WP_CLI::line("Clearing the ALL cache...");
$GLOBALS['wp_fastest_cache']->deleteCache(true);
WP_CLI::success("The cache has been cleared!");
}else{
self::wrong_usage();
}
}else{
WP_CLI::line("Clearing the ALL cache...");
$GLOBALS['wp_fastest_cache']->deleteCache();
WP_CLI::success("The cache has been cleared!");
}
}else{
self::wrong_usage();
}
}else{
self::wrong_usage();
}
}else{
WP_CLI::error("deleteCache() does not exist!");
}
}else{
WP_CLI::error("GLOBALS['wp_fastest_cache'] has not been defined!");
}
}
}
WP_CLI::add_command( 'fastest-cache', 'wpfcCLI' );
?>

View File

@@ -0,0 +1,33 @@
<?php
class WpFastestCacheColumn{
public function __construct(){}
public function add(){
add_filter('post_row_actions', array($this, 'add_clear_cache_link'), 10, 2);
add_filter('page_row_actions', array($this, 'add_clear_cache_link'), 10, 2);
add_action('admin_enqueue_scripts', array($this, 'load_js'));
add_action('wp_ajax_wpfc_clear_cache_column', array($this, "clear_cache_column"));
}
public function add_clear_cache_link($actions, $post){
$actions['clear_cache_link'] = '<a data-id="'.$post->ID.'" data-nonce="'.wp_create_nonce('clear-cache_'.$post->ID).'" id="wpfc-clear-cache-link-'.$post->ID.'" style="cursor:pointer;">' . __('Clear Cache') . '</a>';
return $actions;
}
public function clear_cache_column(){
if(wp_verify_nonce($_GET["nonce"], 'clear-cache_'.$_GET["id"])){
$GLOBALS["wp_fastest_cache"]->singleDeleteCache(false, esc_sql($_GET["id"]));
die(json_encode(array("success" => true)));
}else{
die(json_encode(array("success" => false)));
}
}
public function load_js(){
wp_enqueue_script("wpfc-column", plugins_url("wp-fastest-cache/js/column.js"), array(), time(), true);
}
}
?>

View File

@@ -0,0 +1,767 @@
<?php
class CssUtilities{
private $html = "";
private $tags = array();
private $except = "";
private $wpfc;
private $url = "";
private $url_for_fix = "";
public function __construct($wpfc, $html){
$this->wpfc = $wpfc;
$this->html = $html;
$this->set_except_tags();
$this->set_tags();
$this->tags_reorder();
}
public function check_exclude($css_url = false){
if($css_url){
// to exclude the css source of elementor which is /elementor/css/post-[number].css to avoid increasing the size of minified sources
if(preg_match("/\/elementor\/css\/post-\d+\.css/i", $css_url)){
return true;
}
foreach((array)$this->wpfc->exclude_rules as $key => $value){
if(isset($value->prefix) && $value->prefix && $value->type == "css"){
if($value->prefix == "contain"){
$preg_match_rule = preg_quote($value->content, "/");
}
if(preg_match("/".$preg_match_rule."/i", $css_url)){
return true;
}
}
}
}
}
public function combineCss(){
$all = array();
$group = array();
foreach ($this->tags as $key => $value) {
if(preg_match("/<link/i", $value["text"])){
if($this->except){
if(strpos($this->except, $value["text"]) !== false){
array_push($all, $group);
$group = array();
continue;
}
}
if(!$this->checkInternal($value["text"])){
array_push($all, $group);
$group = array();
continue;
}
if($this->check_exclude($value["text"])){
array_push($all, $group);
$group = array();
continue;
}
if(count($group) > 0){
if($group[0]["media"] == $value["media"]){
array_push($group, $value);
}else{
array_push($all, $group);
$group = array();
array_push($group, $value);
}
}else{
array_push($group, $value);
}
if($value === end($this->tags)){
array_push($all, $group);
}
}
if(preg_match("/<style/i", $value["text"])){
if(count($group) > 0){
array_push($all, $group);
$group = array();
}
}
}
if(count($all) > 0){
$all = array_reverse($all);
foreach ($all as $group_key => $group_value) {
if(count($group_value) > 0){
$combined_css = "";
$combined_name = $this->wpfc->create_name($group_value);
$combined_link = "";
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/".$combined_name;
$cssLink = $this->convert_path_to_link($cachFilePath);
if(is_dir($cachFilePath)){
if($cssFiles = @scandir($cachFilePath, 1)){
$combined_link = '<link rel="stylesheet" type="text/css" href="'.$cssLink."/".$cssFiles[0].'" media="'.$group_value[0]["media"].'"/>';
if($css_content = $this->wpfc->read_file($cssLink."/".$cssFiles[0])){
$css_content = $this->apply_filter($css_content);
$combined_link = $this->to_inline($combined_link, $css_content);
}
}
}else{
$combined_css = $this->create_content(array_reverse($group_value));
$combined_css = $this->fix_charset($combined_css);
if($combined_css){
if($this->wpfc->cdn){
$combined_css = preg_replace_callback("/(url)\(([^\)]+)\)/i", array($this->wpfc, 'cdn_replace_urls'), $combined_css);
}
$this->wpfc->createFolder($cachFilePath, $combined_css, "css");
if(is_dir($cachFilePath)){
if($cssFiles = @scandir($cachFilePath, 1)){
$combined_link = '<link rel="stylesheet" type="text/css" href="'.$cssLink."/".$cssFiles[0].'" media="'.$group_value[0]["media"].'"/>';
$combined_css = $this->apply_filter($combined_css);
$combined_link = $this->to_inline($combined_link, $combined_css);
}
}
}
}
if($combined_link){
foreach (array_reverse($group_value) as $tag_key => $tag_value) {
$text = substr($this->html, $tag_value["start"], ($tag_value["end"]-$tag_value["start"] + 1));
if($tag_key > 0){
$this->html = substr_replace($this->html, "<!-- ".$text." -->", $tag_value["start"], ($tag_value["end"] - $tag_value["start"] + 1));
}else{
$this->html = substr_replace($this->html, "<!-- ".$text." -->"."\n".$combined_link, $tag_value["start"], ($tag_value["end"] - $tag_value["start"] + 1));
}
}
}
}
}
}
return $this->html;
}
public function create_content($group_value){
$combined_css = "";
foreach ($group_value as $tag_key => $tag_value) {
$minifiedCss = $this->minify($tag_value["href"]);
if($minifiedCss){
$combined_css = $minifiedCss["cssContent"].$combined_css;
}else{
return false;
}
}
return $combined_css;
}
public function minifyCss(){
$data = $this->html;
if(count($this->tags) > 0){
foreach (array_reverse($this->tags) as $key => $value) {
$text = substr($data, $value["start"], ($value["end"]-$value["start"] + 1));
if(preg_match("/<link/i", $text)){
if($href = $this->checkInternal($text)){
if($this->check_exclude($href)){
continue;
}
$minifiedCss = $this->minify($href);
if($minifiedCss){
$prefixLink = str_replace(array("http:", "https:"), "", $minifiedCss["url"]);
$text = preg_replace("/href\=[\"\'][^\"\']+[\"\']/", "href='".$prefixLink."'", $text);
$minifiedCss["cssContent"] = $this->apply_filter($minifiedCss["cssContent"]);
$text = $this->to_inline($text, $minifiedCss["cssContent"]);
$this->html = substr_replace($this->html, $text, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
}
}
}
return $this->html;
}
public function to_inline($link, $css_content){
if(!isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheRenderBlocking)){
return $link;
}
if(!preg_match("/\smedia\=[\'\"]all[\'\"]/i", $link)){
return $link;
}
if(isset($css_content["11000"])){
return $link;
}
$link = "<style>".$css_content."</style>";
return $link;
}
public function tags_reorder(){
$sorter = array();
$ret = array();
foreach ($this->tags as $ii => $va) {
$sorter[$ii] = $va['start'];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
$ret[$ii] = $this->tags[$ii];
}
$this->tags = $ret;
}
public function set_except_tags(){
$comment_tags = $this->find_tags("<!--", "-->");
foreach ($comment_tags as $key => $value) {
$this->except = $value["text"].$this->except;
}
// to execute if html contains <noscript> tag
if(preg_match("/<noscript/i", $this->html)){
$noscript_tags = $this->find_tags("<noscript", "</noscript>");
foreach ($noscript_tags as $key => $value) {
$this->except = $value["text"].$this->except;
if(isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheLazyLoad)){
// to set noscript for lazy load
// <noscript><img src="http://google.com/image.jpg"></noscript>
$GLOBALS["wp_fastest_cache"]->noscript = $value["text"].$GLOBALS["wp_fastest_cache"]->noscript;
}
}
}
// $("head").append( "<link rel='stylesheet' id='ms-fonts' href='//fonts.googleapis.com/css?family=Exo+2:regular' type='text/css' media='all' />" );
$script_tags = $this->find_tags("<script", "</script>");
foreach ($script_tags as $key => $value) {
$link_tags = $this->find_tags("<link", ">", $value["text"]);
if(count($link_tags) > 0){
$this->except = $value["text"].$this->except;
}
}
}
public function set_tags(){
$style_tags = $this->find_tags("<style", "</style>");
$this->tags = array_merge($this->tags, $style_tags);
$link_tags = $this->find_tags("<link", ">");
foreach ($link_tags as $key => $value) {
//<link rel='stylesheet' id='avada-dynamic-css-css' href='/wp-content/uploads/avada-styles/avada-9.css?timestamp=1485306359&#038;ver=4.7.2' type='text/css' media='all' />
if(preg_match("/avada-dynamic-css-css/", $value["text"])){
continue;
}
preg_match("/media\=[\'\"]([^\'\"]+)[\'\"]/", $value["text"], $media);
preg_match("/href\=[\'\"]([^\'\"]+)[\'\"]/", $value["text"], $href);
$media[1] = (isset($media[1]) && $media[1]) ? trim($media[1]) : "";
$value["media"] = (isset($media[1]) && $media[1]) ? $media[1] : "all";
if(isset($href[1])){
$href[1] = trim($href[1]);
$value["href"] = (isset($href[1]) && $href[1]) ? $href[1] : "";
if(preg_match("/href\s*\=/i", $value["text"])){
if(preg_match("/rel\s*\=\s*[\'\"]\s*stylesheet\s*[\'\"]/i", $value["text"])){
array_push($this->tags, $value);
}
}
}
}
}
public function find_tags($start_string, $end_string, $source = false){
if($source){
$data = $source;
}else{
$data = $this->html;
}
$list = array();
$start_index = false;
$end_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(substr($data, $i, strlen($start_string)) == $start_string){
$start_index = $i;
}
if($start_index && $i > $start_index){
if(substr($data, $i, strlen($end_string)) == $end_string){
$end_index = $i + strlen($end_string)-1;
$text = substr($data, $start_index, ($end_index-$start_index + 1));
array_push($list, array("start" => $start_index, "end" => $end_index, "text" => $text));
$start_index = false;
$end_index = false;
}
}
}
return $list;
}
public function minify($url){
$this->url = $url;
$md5 = $this->wpfc->create_name($url);
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/".$md5;
$cssLink = $this->convert_path_to_link($cachFilePath);
if(is_dir($cachFilePath)){
if($cssFiles = @scandir($cachFilePath, 1)){
if($cssContent = $this->file_get_contents_curl($cssLink."/".$cssFiles[0])){
$cssContent = $this->apply_filter($cssContent);
return array("cachFilePath" => $cachFilePath, "cssContent" => $cssContent, "url" => $cssLink."/".$cssFiles[0], "realUrl" => $url);
}else{
return false;
}
}
}else{
if($cssContent = $this->file_get_contents_curl($url, "?v=".time())){
$original_content_length = strlen($cssContent);
if(isset($this->wpfc->options->wpFastestCacheMinifyCss) && $this->wpfc->options->wpFastestCacheMinifyCss){
$cssContent = $this->_process($cssContent);
}
$cssContent = $this->fixPathsInCssContent($cssContent, $url);
$cssContent = $this->apply_filter($cssContent);
if(isset($this->wpfc->options->wpFastestCacheMinifyCssPowerFul) && $this->wpfc->options->wpFastestCacheMinifyCssPowerFul){
if(class_exists("WpFastestCachePowerfulHtml")){
$powerful_html = new WpFastestCachePowerfulHtml();
$cssContent = $powerful_html->minify_css($cssContent);
}
}
$cssContent = str_replace("\xEF\xBB\xBF", '', $cssContent);
// If the content is empty, the file is not created. This breaks "combine css" feature
if(strlen($cssContent) == 0 && $original_content_length > 0){
return array("cssContent" => "", "url" => $url);
}
if(!is_dir($cachFilePath)){
if($this->wpfc->cdn){
$cssContent = preg_replace_callback("/(url)\(([^\)]+)\)/i", array($this->wpfc, 'cdn_replace_urls'), $cssContent);
}
$this->wpfc->createFolder($cachFilePath, $cssContent, "css");
}
if($cssFiles = @scandir($cachFilePath, 1)){
return array("cachFilePath" => $cachFilePath, "cssContent" => $cssContent, "url" => $cssLink."/".$cssFiles[0], "realUrl" => $url);
}
}
}
return false;
}
public function fixPathsInCssContent($css, $url){
$this->url_for_fix = $url;
$css = preg_replace("/@import\s+[\"\']([^\;\"\'\)]+)[\"\'];/", "@import url($1);", $css);
$css = preg_replace_callback("/url\(([^\)\n]*)\)/", array($this, 'newImgPath'), $css);
$css = preg_replace_callback('/@import\s+url\(([^\)]+)\);/i', array($this, 'fix_import_rules'), $css);
$css = $this->fix_charset($css);
return $css;
}
public function svg_to_file($source){
return $source;
if(preg_match("/base64\,/", $source)){
$is_base64 = true;
}else{
$is_base64 = false;
}
if(preg_match("/\,(%3Csvg|<svg)/", $source) || $is_base64){
$source = preg_replace("/\"|\'/", "", $source);
$source = preg_replace("/data[^\,]+\,/", "", $source);
if($is_base64){
$source = base64_decode($source);
}else{
$source = rawurldecode($source);
}
$md5 = $this->wpfc->create_name($source);
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/svg-".$md5;
$this->wpfc->createFolder($cachFilePath, $source, "svg");
if(is_dir($cachFilePath)){
if($cssFiles = @scandir($cachFilePath, 1)){
$source = $this->convert_path_to_link($cachFilePath."/".$cssFiles[0]);
}
}
}
return $source;
}
public function woff_to_file($source){
return $source;
// url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAA")
if(preg_match("/base64\,/", $source)){
$is_base64 = true;
}else{
$is_base64 = false;
}
if($is_base64){
// not to use preg_match() for the speed
$source = strstr($source, 'base64,');
$source = str_replace("base64,", "", $source);
$source = trim($source);
$source = str_replace(array("'", '"'), "", $source);
$md5 = $this->wpfc->create_name($source);
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/woff-".$md5;
$this->wpfc->createFolder($cachFilePath, $source, "woff");
if(is_dir($cachFilePath)){
if($cssFiles = @scandir($cachFilePath, 1)){
$link = $this->convert_path_to_link($cachFilePath."/".$cssFiles[0]);
return $link;
}
}
}
return $source;
}
public function newImgPath($matches){
$matches[1] = trim($matches[1]);
if(preg_match("/data\:font\/opentype/i", $matches[1])){
}else if(preg_match("/^%23/", $matches[1])){
// %23 => #
// data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='url(%23d)'
$matches[1] = $matches[1];
}else if(preg_match("/data\:application\/(x-)?font-woff/i", $matches[1])){
// data:application/font-woff
// data:application/x-font-woff
$matches[1] = $this->woff_to_file($matches[1]);
}else if(preg_match("/data\:image\/svg\+xml/i", $matches[1])){
$matches[1] = $this->svg_to_file($matches[1]);
}else{
$matches[1] = str_replace(array("\"","'"), "", $matches[1]);
$matches[1] = trim($matches[1]);
if(!$matches[1]){
$matches[1] = "";
}else if(preg_match("/^\#/", $matches[1])){
$matches[1] = $matches[1];
}else if(preg_match("/^(\/\/|http|\/\/fonts|data:image|data:application)/", $matches[1])){
if(preg_match("/fonts\.googleapis\.com/", $matches[1])){ // for safari browser
$matches[1] = '"'.$matches[1].'"';
}else{
$matches[1] = $matches[1];
}
}else if(preg_match("/^\//", $matches[1])){
$homeUrl = str_replace(array("http:", "https:"), "", home_url());
$matches[1] = $homeUrl.$matches[1];
}else if(preg_match("/^\.\/.+/i", $matches[1])){
//$matches[1] = str_replace("./", get_template_directory_uri()."/", $matches[1]);
$matches[1] = str_replace("./", dirname($this->url_for_fix)."/", $matches[1]);
}else if(preg_match("/^(?P<up>(\.\.\/)+)(?P<name>.+)/", $matches[1], $out)){
$count = strlen($out["up"])/3;
$url = dirname($this->url);
for($i = 1; $i <= $count; $i++){
$url = substr($url, 0, strrpos($url, "/"));
}
$url = str_replace(array("http:", "https:"), "", $url);
$matches[1] = $url."/".$out["name"];
}else{
$url = str_replace(array("http:", "https:"), "", dirname($this->url));
$matches[1] = $url."/".$matches[1];
}
}
return "url(".$matches[1].")";
}
public function apply_filter($content){
return apply_filters('wpfc_css_content', $content, null, null);
}
public function fix_charset($css){
preg_match_all('/@charset[^\;]+\;/i', $css, $charsets);
if(count($charsets[0]) > 0){
$css = preg_replace('/@charset[^\;]+\;/i', "", $css);
foreach($charsets[0] as $charset){
$css = $charset."\n".$css;
}
}
return $css;
}
public function fix_import_rules($matches){
if($this->is_internal_css($matches[1])){
if($cssContent = $this->file_get_contents_curl($matches[1], "?v=".time())){
$tmp_url = $this->url;
$this->url = $matches[1];
$cssContent = $this->fixPathsInCssContent($cssContent, $matches[1]);
$this->url = $tmp_url;
// to minify again because of the @import css sources
if(isset($this->wpfc->options->wpFastestCacheMinifyCss) && $this->wpfc->options->wpFastestCacheMinifyCss){
$cssContent = $this->_process($cssContent);
}
return $cssContent;
}
}
return $matches[0];
}
protected $_inHack = false;
protected function _process($css){
$css = preg_replace("/^\s+/m", "", ((string) $css));
$css = str_replace("\r", "", $css);
$css = preg_replace_callback('@\\s*/\\*([\\s\\S]*?)\\*/\\s*@'
,array($this, '_commentCB'), $css);
//to remove empty chars from url()
$css = preg_replace("/url\((\s+)([^\)]+)(\s+)\)/", "url($2)", $css);
return trim($css);
}
protected function _commentCB($m){
$hasSurroundingWs = (trim($m[0]) !== $m[1]);
$m = $m[1];
// $m is the comment content w/o the surrounding tokens,
// but the return value will replace the entire comment.
if ($m === 'keep') {
return '/**/';
}
if ($m === '" "') {
// component of http://tantek.com/CSS/Examples/midpass.html
return '/*" "*/';
}
if (preg_match('@";\\}\\s*\\}/\\*\\s+@', $m)) {
// component of http://tantek.com/CSS/Examples/midpass.html
return '/*";}}/* */';
}
if ($this->_inHack) {
// inversion: feeding only to one browser
if (preg_match('@
^/ # comment started like /*/
\\s*
(\\S[\\s\\S]+?) # has at least some non-ws content
\\s*
/\\* # ends like /*/ or /**/
@x', $m, $n)) {
// end hack mode after this comment, but preserve the hack and comment content
$this->_inHack = false;
return "/*/{$n[1]}/**/";
}
}
if (substr($m, -1) === '\\') { // comment ends like \*/
// begin hack mode and preserve hack
$this->_inHack = true;
return '/*\\*/';
}
if ($m !== '' && $m[0] === '/') { // comment looks like /*/ foo */
// begin hack mode and preserve hack
$this->_inHack = true;
return '/*/*/';
}
if ($this->_inHack) {
// a regular comment ends hack mode but should be preserved
$this->_inHack = false;
return '/**/';
}
// Issue 107: if there's any surrounding whitespace, it may be important, so
// replace the comment with a single space
return $hasSurroundingWs // remove all other comments
? ' '
: '';
}
public function checkInternal($link){
$httpHost = str_replace("www.", "", $_SERVER["HTTP_HOST"]);
if(preg_match("/href=[\"\'](.*?)[\"\']/", $link, $href)){
if(preg_match("/^\/[^\/]/", $href[1])){
return $href[1];
}
if(@strpos($href[1], $httpHost)){
return $href[1];
}
// if(preg_match("/fonts\.googleapis\.com/i", $href[1])){
// //http://fonts.googleapis.com/css?family=Raleway%3A400%2C600
// if(preg_match("/Raleway/i", $href[1])){
// return false;
// }
// return $href[1];
// }
}
return false;
}
public function is_internal_css($url){
$http_host = trim($_SERVER["HTTP_HOST"], "www.");
$url = trim($url);
$url = trim($url, "'");
$url = trim($url, '"');
$url = str_replace(array("http://", "https://"), "", $url);
$url = trim($url, '//');
$url = trim($url, 'www.');
if($url){
if(preg_match("/".$http_host."/i", $url)){
return true;
}
// if(preg_match("/fonts\.googleapis\.com/i", $url)){
// //http://fonts.googleapis.com/css?family=Raleway%3A400%2C600
// if(preg_match("/Raleway/i", $url)){
// return false;
// }
// return true;
// }
}
return false;
}
public function convert_path_to_link($path){
preg_match("/\/cache\/.+/", $path, $out);
$prefixLink = str_replace(array("http:", "https:"), "", WPFC_WP_CONTENT_URL);
return $prefixLink.$out[0];
}
public function file_get_contents_curl($url, $version = ""){
if($data = $this->wpfc->read_file($url)){
return $data;
}
$url = str_replace('&#038;', '&', $url);
if(preg_match("/\.php\?/i", $url)){
$version = "";
}
if(preg_match("/(fonts\.googleapis\.com|iire-social-icons)/i", $url)){
$version = "";
$url = str_replace(array("'",'"'), "", $url);
}
$url = $url.$version;
if(preg_match("/^\/[^\/]/", $url)){
$url = get_option("home").$url;
}
if(preg_match("/http\:\/\//i", home_url())){
$url = preg_replace("/^\/\//", "http://", $url);
}else if(preg_match("/https\:\/\//i", home_url())){
$url = preg_replace("/^\/\//", "https://", $url);
}
//$response = wp_remote_get($url, array('timeout' => 10, 'headers' => array("cache-control" => array("no-store, no-cache, must-revalidate", "post-check=0, pre-check=0"))));
$response = wp_remote_get($url, array('timeout' => 10, 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36'));
if ( !$response || is_wp_error( $response ) ) {
return false;
}else{
if(wp_remote_retrieve_response_code($response) == 200){
$data = wp_remote_retrieve_body( $response );
if(preg_match("/\<\!DOCTYPE/i", $data) || preg_match("/<\/\s*html\s*>/i", $data)){
return false;
}else if(!$data){
return "/* empty */";
}else{
return $data;
}
}else if(wp_remote_retrieve_response_code($response) == 404){
if(preg_match("/\.css/", $url)){
return "/*404*/";
}else{
return "<!-- 404 -->";
}
}
}
}
}
?>

View File

@@ -0,0 +1 @@
Silence is golden.

View File

@@ -0,0 +1,341 @@
<?php
class JsUtilities{
private $wpfc;
private $html = "";
private $jsLinks = array();
private $jsLinksExcept = "";
private $url = "";
private $minify;
public function __construct($wpfc, $html, $minify = false){
//$this->html = preg_replace("/\s+/", " ", ((string) $html));
$this->minify = $minify;
$this->wpfc = $wpfc;
$this->html = $html;
$this->setJsLinksExcept();
$this->setJsLinks();
}
public function check_exclude($js_url = false){
if($js_url){
foreach((array)$this->wpfc->exclude_rules as $key => $value){
if(isset($value->prefix) && $value->prefix && $value->type == "js"){
if($value->prefix == "contain"){
$preg_match_rule = preg_quote($value->content, "/");
}
if(preg_match("/".$preg_match_rule."/i", $js_url)){
return true;
}
}
}
}
}
public function combine_js(){
if(count($this->jsLinks) > 0){
$prev_content = "";
foreach($this->jsLinks as $key => $value){
$script_tag = substr($this->html, $value["start"], ($value["end"] - $value["start"] + 1));
if(!preg_match("/<script[^>]+json[^>]+>.+/", $script_tag) && !preg_match("/<script[^>]+text\/template[^>]+>.+/", $script_tag)){
if($href = $this->checkInternal($script_tag)){
if(strpos($this->jsLinksExcept, $href) === false){
if($key == 0 && $this->check_exclude($href)){
continue;
}
if($key > 0 && $this->check_exclude($href)){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
continue;
}
if(preg_match("/data-no-minify/i", $script_tag) || preg_match("/type\s*=\s*[\"\']\s*module\s*[\"\']/i", $script_tag)){
if($key > 0 && $prev_content){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
continue;
}else{
continue;
}
}
$minifiedJs = $this->minify($href);
if($minifiedJs){
if(!is_dir($minifiedJs["cachFilePath"])){
$this->wpfc->createFolder($minifiedJs["cachFilePath"], $minifiedJs["jsContent"], "js");
}
if($jsFiles = @scandir($minifiedJs["cachFilePath"], 1)){
$jsFiles[0] = preg_replace("/\.gz$/", "", $jsFiles[0]);
if($jsContent = $this->file_get_contents_curl($minifiedJs["url"]."/".$jsFiles[0]."?v=".time())){
if($key > 0 && preg_match("/^[\"\']use strict[\"\']/i", $jsContent)){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
}else{
$prev_content = $jsContent."\n".$prev_content;
$script_tag = "<!-- ".$script_tag." -->";
if(($key + 1) == count($this->jsLinks)){
$this->mergeJs($prev_content, $value, true);
$prev_content = "";
}else{
$this->html = substr_replace($this->html, $script_tag, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
}
}
}else{
if($key > 0 && $prev_content){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
}
}
}else{
if($key > 0 && $prev_content){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
}
}
}else{
if($key > 0 && $prev_content){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
}
}
}else{
if($key > 0 && $prev_content){
$this->mergeJs($prev_content, $this->jsLinks[$key - 1]);
$prev_content = "";
}
}
}
}
return $this->html;
}
public function setJsLinks(){
$data = $this->html;
$script_list = array();
$script_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-6])){
if(substr($data, $i-6, 7) == "<script"){
$script_start_index = $i-6;
}
}
if(isset($data[$i-8])){
if($script_start_index){
if(substr($data, $i-8, 9) == "</script>"){
array_push($script_list, array("start" => $script_start_index, "end" => $i));
$script_start_index = false;
}
}
}
}
if(count($script_list) > 0){
$this->jsLinks = array_reverse($script_list);
}
// to update jsLinksExcept
foreach($this->jsLinks as $key => $value){
$script_tag = substr($this->html, $value["start"], ($value["end"] - $value["start"] + 1));
if(preg_match("/wp-spamshield\/js\/jscripts\.php/i", $script_tag)){
$this->jsLinksExcept = $this->jsLinksExcept.$script_tag;
}
//amazonjs/components/js/jquery-tmpl/jquery.tmpl.min.js?ver=1.0.0pre
if(preg_match("/jquery-tmpl\/jquery\.tmpl\.min\.js/i", $script_tag)){
$this->jsLinksExcept = $this->jsLinksExcept.$script_tag;
}
}
}
public function setJsLinksExcept(){
$comment_tags = $this->find_tags("<!--", "-->");
$document_write = $this->find_tags("document.write(", ")");
foreach ($comment_tags as $key => $value) {
if(preg_match("/<script/i", $value["text"]) && preg_match("/<\/script/i", $value["text"])){
$this->jsLinksExcept = $value["text"].$this->jsLinksExcept;
}
}
foreach ($document_write as $key => $value) {
$this->jsLinksExcept = $value["text"].$this->jsLinksExcept;
}
}
public function minify($url){
$this->url = $url;
$md5 = $this->wpfc->create_name($url);
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/".$md5;
$jsLink = $this->convert_path_to_link($cachFilePath);
if(is_dir($cachFilePath)){
return array("cachFilePath" => $cachFilePath, "jsContent" => "", "url" => $jsLink);
}else{
if($js = $this->file_get_contents_curl($url)){
if($this->minify){
if(class_exists("WpFastestCachePowerfulHtml")){
$powerful_html = new WpFastestCachePowerfulHtml();
$js = $powerful_html->minify_js($js);
}else{
$js = "\n// source --> ".$url." \n".$js;
}
}else{
$js = "\n// source --> ".$url." \n".$js;
}
return array("cachFilePath" => $cachFilePath, "jsContent" => $js, "url" => $jsLink);
}
}
return false;
}
public function checkInternal($link){
$httpHost = str_replace("www.", "", $_SERVER["HTTP_HOST"]);
if(preg_match("/^<script[^\>]+\>/i", $link, $script)){
if(preg_match("/src=[\"\'](.*?)[\"\']/", $script[0], $src)){
if(preg_match("/alexa\.com\/site\_stats/i", $src[1])){
return false;
}
if(preg_match("/^\/[^\/]/", $src[1])){
return $src[1];
}
if(preg_match("/".preg_quote($httpHost, "/")."/i", $src[1])){
//<script src="https://server1.opentracker.net/?site=www.site.com"></script>
if(preg_match("/[\?\=].*".preg_quote($httpHost, "/")."/i", $src[1])){
return false;
}
return $src[1];
}
}
}
return false;
}
public function mergeJs($js_content, $value, $last = false){
$name = md5($js_content);
$name = base_convert(crc32($name), 20, 36);
$cachFilePath = $this->wpfc->getWpContentDir("/cache/wpfc-minified")."/".$name;
$jsLink = $this->convert_path_to_link($cachFilePath);
if(!is_dir($cachFilePath)){
$this->wpfc->createFolder($cachFilePath, $js_content, "js");
}
if(is_dir($cachFilePath)){
if($jsFiles = @scandir($cachFilePath, 1)){
$newLink = "<script src='".$jsLink."/".$jsFiles[0]."' type=\"text/javascript\"></script>";
$script_tag = substr($this->html, $value["start"], ($value["end"] - $value["start"] + 1));
if($last){
$script_tag = $newLink."\n<!-- ".$script_tag." -->\n";
}else{
$script_tag = $newLink."\n".$script_tag;
}
$this->html = substr_replace($this->html, $script_tag, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
}
public function convert_path_to_link($path){
preg_match("/\/cache\/.+/", $path, $out);
$prefixLink = str_replace(array("http:", "https:"), "", WPFC_WP_CONTENT_URL);
return $prefixLink.$out[0];
}
public function file_get_contents_curl($url) {
if($data = $this->wpfc->read_file($url)){
return $data;
}
if(!preg_match("/\.php$/", $url)){
$url = $url."?v=".time();
}
if(preg_match("/^\/[^\/]/", $url)){
$url = home_url().$url;
}
$url = preg_replace("/^\/\//", "http://", $url);
$response = wp_remote_get($url, array('timeout' => 10 ) );
if ( !$response || is_wp_error( $response ) ) {
return false;
}else{
if(wp_remote_retrieve_response_code($response) == 200){
$data = wp_remote_retrieve_body( $response );
if(preg_match("/<\/\s*html\s*>\s*$/i", $data)){
return false;
}else{
return $data;
}
}
}
}
public function find_tags($start_string, $end_string){
$data = $this->html;
$list = array();
$start_index = false;
$end_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(substr($data, $i, strlen($start_string)) == $start_string){
$start_index = $i;
}
if($start_index && $i > $start_index){
if(substr($data, $i, strlen($end_string)) == $end_string){
$end_index = $i + strlen($end_string)-1;
$text = substr($data, $start_index, ($end_index-$start_index + 1));
array_push($list, array("start" => $start_index, "end" => $end_index, "text" => $text));
$start_index = false;
$end_index = false;
}
}
}
return $list;
}
}
?>

View File

@@ -0,0 +1,892 @@
<?php
class PreloadWPFC{
private static $exclude_rules = false;
public static function wpml_get_permalink($post_id, $permalink){
$my_post_language_details = apply_filters( 'wpml_post_language_details', NULL, $post_id) ;
if(is_array($my_post_language_details) && isset($my_post_language_details["language_code"])){
$wpml_permalink = apply_filters( 'wpml_permalink', $permalink , $my_post_language_details["language_code"] );
return $wpml_permalink;
}
return $permalink;
}
public static function set_preload($slug){
$preload_arr = array();
if(!empty($_POST) && isset($_POST["wpFastestCachePreload"])){
if(!current_user_can('manage_options')){
wp_die("Must be admin");
}
if(isset($_POST["wpFastestCachePreload_sitemap"]) && $_POST["wpFastestCachePreload_sitemap"]){
$sitemap_url = explode(",", $_POST["wpFastestCachePreload_sitemap"]);
$sitemap_arr = array();
foreach ($sitemap_url as $s_key => $s_value) {
$s_value = esc_url($s_value);
array_push($sitemap_arr, array("url" => $s_value, "pointer" => 0));
}
$preload_arr["sitemaps"] = $sitemap_arr;
}else{
foreach ($_POST as $key => $value) {
$key = esc_attr($key);
$value = esc_attr($value);
preg_match("/wpFastestCachePreload_(.+)/", $key, $type);
if(!empty($type)){
if($type[1] == "restart" || $type[1] == "sitemap"){
//to need to remove "restart" value
}else if($type[1] == "number"){
$preload_arr[$type[1]] = $value;
}else{
$preload_arr[$type[1]] = 0;
}
}
}
}
}
if($data = get_option("WpFastestCachePreLoad")){
$preload_std = json_decode($data);
if(empty($preload_arr)){
// clear cache process
if(isset($preload_std->sitemaps) && !empty($preload_std->sitemaps)){
foreach ($preload_std->sitemaps as $s_key => $s_value) {
$s_value->pointer = 0;
}
}else{
foreach ($preload_std as $key => &$value) {
if($key != "number"){
$value = 0;
}
}
}
}else{
// save settings process
if(isset($preload_arr["sitemaps"])){
if(isset($preload_std->sitemaps) && !empty($preload_std->sitemaps)){
for ($i=0; $i < count($preload_arr["sitemaps"]) ; $i++) {
for ($j=0; $j < count($preload_std->sitemaps); $j++) {
if($preload_arr["sitemaps"][$i]["url"] == $preload_std->sitemaps[$j]->url){
if(isset($preload_std->sitemaps[$j]->pointer)){
$preload_arr["sitemaps"][$i]["pointer"] = $preload_std->sitemaps[$j]->pointer;
}
if(isset($preload_std->sitemaps[$j]->total)){
$preload_arr["sitemaps"][$i]["total"] = $preload_std->sitemaps[$j]->total;
}
}
}
}
$preload_std = $preload_arr;
}else{
foreach ($preload_arr as $key => &$value) {
if(!empty($preload_std->$key)){
if($key != "number"){
$value = $preload_std->$key;
}
}
}
$preload_std = $preload_arr;
}
}else{
foreach ($preload_arr as $key => &$value) {
if(!empty($preload_std->$key)){
if($key != "number"){
$value = $preload_std->$key;
}
}
}
$preload_std = $preload_arr;
}
}
update_option("WpFastestCachePreLoad", json_encode($preload_std));
if(!wp_next_scheduled($slug."_Preload")){
wp_schedule_event(time() + 5, 'everyfiveminute', $slug."_Preload");
}
}else{
if(!empty($preload_arr)){
add_option("WpFastestCachePreLoad", json_encode($preload_arr), null, "yes");
if(!wp_next_scheduled($slug."_Preload")){
wp_schedule_event(time() + 5, 'everyfiveminute', $slug."_Preload");
}
}else{
//toDO
}
}
}
public static function statistic($pre_load = false){
$total = new stdClass();
if(isset($pre_load->homepage)){
$total->homepage = 1;
}
if(isset($pre_load->customposttypes)){
global $wpdb;
$post_types = get_post_types(array('public' => true), "names", "and");
$where_query = "";
foreach ($post_types as $post_type_key => $post_type_value) {
if(!in_array($post_type_key, array("post", "page", "attachment"))){
$where_query = $where_query.$wpdb->prefix."posts.post_type = '".$post_type_value."' OR ";
}
}
if($where_query){
$where_query = preg_replace("/(\s*OR\s*)$/", "", $where_query);
$recent_custom_posts = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS COUNT(".$wpdb->prefix."posts.ID) as total FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$where_query.") AND ((".$wpdb->prefix."posts.post_status = 'publish')) ORDER BY ".$wpdb->prefix."posts.ID", ARRAY_A);
$total->customposttypes = $recent_custom_posts[0]["total"];
}
}
if(isset($pre_load->post)){
$count_posts = wp_count_posts("post", array('post_status' => 'publish', 'suppress_filters' => true));
$total->post = $count_posts->publish;
}
if(isset($pre_load->attachment)){
$total_attachments = wp_count_attachments();
$total->attachment = array_sum((array)$total_attachments) - $total_attachments->trash;
}
if(isset($pre_load->page)){
$count_pages = wp_count_posts("page", array('post_status' => 'publish', 'suppress_filters' => true));
$total->page = $count_pages->publish;
}
if(isset($pre_load->category)){
$total->category = wp_count_terms("category", array('hide_empty' => false));
}
if(isset($pre_load->tag)){
$total->tag = wp_count_terms("post_tag", array('hide_empty' => false));
}
if(isset($pre_load->customTaxonomies)){
$taxo = get_taxonomies(array('public' => true, '_builtin' => false), "names", "and");
if(count($taxo) > 0){
$total->customTaxonomies = wp_count_terms($taxo, array('hide_empty' => false));
}
}
foreach ($total as $key => $value) {
$pre_load->$key = $pre_load->$key == -1 ? $value : $pre_load->$key;
echo esc_html($key).": ".esc_html($pre_load->$key)."/".esc_html($value)."<br>";
}
}
public static function create_preload_cache_default($pre_load, $options){
if(defined("WPFC_PRELOAD_NUMBER") && WPFC_PRELOAD_NUMBER){
$number = WPFC_PRELOAD_NUMBER;
}else{
$number = $pre_load->number;
}
//START:ORDER
if(isset($pre_load->order) && $pre_load->order){
$order_arr = explode(",", $pre_load->order);
}else{
if(isset($options->wpFastestCachePreload_order) && $options->wpFastestCachePreload_order){
$order_arr = explode(",", $options->wpFastestCachePreload_order);
}
}
if(isset($order_arr) && is_array($order_arr)){
foreach ($order_arr as $o_key => $o_value){
if($o_value == "order" || $o_value == "number"){
unset($order_arr[$o_key]);
}
if(!isset($pre_load->$o_value)){
unset($order_arr[$o_key]);
}
}
$order_arr = array_values($order_arr);
}
$current_order = isset($order_arr[0]) ? $order_arr[0] : "go";
//START:END
$urls_limit = isset($options->wpFastestCachePreload_number) ? $options->wpFastestCachePreload_number : 4; // must be even
$urls = array();
if(isset($options->wpFastestCacheMobileTheme) && $options->wpFastestCacheMobileTheme){
$mobile_theme = true;
$number = round($number/2);
}else{
$mobile_theme = false;
}
// HOME
if(isset($current_order) && ($current_order == "homepage" || $current_order == "go")){
if(isset($pre_load->homepage) && $pre_load->homepage > -1){
if($mobile_theme){
array_push($urls, array("url" => get_option("home"), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => get_option("home"), "user-agent" => "desktop"));
$number--;
$pre_load->homepage = -1;
}
}
// CUSTOM POSTS
if(isset($current_order) && ($current_order == "customposttypes" || $current_order == "go")){
if($number > 0 && isset($pre_load->customposttypes) && $pre_load->customposttypes > -1){
global $wpdb;
$post_types = get_post_types(array('public' => true), "names", "and");
$where_query = "";
foreach ($post_types as $post_type_key => $post_type_value) {
if(!in_array($post_type_key, array("post", "page", "attachment"))){
$where_query = $where_query.$wpdb->prefix."posts.post_type = '".$post_type_value."' OR ";
}
}
if($where_query){
$where_query = preg_replace("/(\s*OR\s*)$/", "", $where_query);
$recent_custom_posts = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$where_query.") AND ((".$wpdb->prefix."posts.post_status = 'publish')) ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->customposttypes.", ".$number, ARRAY_A);
if(count($recent_custom_posts) > 0){
foreach ($recent_custom_posts as $key => $post) {
if($mobile_theme){
array_push($urls, array("url" => self::wpml_get_permalink($post["ID"], get_permalink($post["ID"])), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => self::wpml_get_permalink($post["ID"], get_permalink($post["ID"])), "user-agent" => "desktop"));
$number--;
$pre_load->customposttypes = $pre_load->customposttypes + 1;
}
}else{
$pre_load->customposttypes = -1;
}
}
}
}
// POST
if(isset($current_order) && ($current_order == "post" || $current_order == "go")){
if($number > 0 && isset($pre_load->post) && $pre_load->post > -1){
// $recent_posts = wp_get_recent_posts(array(
// 'numberposts' => $number,
// 'offset' => $pre_load->post,
// 'orderby' => 'ID',
// 'order' => 'DESC',
// 'post_type' => 'post',
// 'post_status' => 'publish',
// 'suppress_filters' => true
// ), ARRAY_A);
global $wpdb;
$recent_posts = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$wpdb->prefix."posts.post_type = 'post') AND ((".$wpdb->prefix."posts.post_status = 'publish')) ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->post.", ".$number, ARRAY_A);
if(count($recent_posts) > 0){
foreach ($recent_posts as $key => $post) {
if($mobile_theme){
array_push($urls, array("url" => self::wpml_get_permalink($post["ID"], get_permalink($post["ID"])), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => self::wpml_get_permalink($post["ID"], get_permalink($post["ID"])), "user-agent" => "desktop"));
$number--;
$pre_load->post = $pre_load->post + 1;
}
}else{
$pre_load->post = -1;
}
}
}
// ATTACHMENT
if(isset($current_order) && ($current_order == "attachment" || $current_order == "go")){
if($number > 0 && isset($pre_load->attachment) && $pre_load->attachment > -1){
global $wpdb;
$recent_attachments = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$wpdb->prefix."posts.post_type = 'attachment') ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->attachment.", ".$number, ARRAY_A);
if(count($recent_attachments) > 0){
foreach ($recent_attachments as $key => $attachment) {
if($mobile_theme){
array_push($urls, array("url" => get_permalink($attachment["ID"]), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => get_permalink($attachment["ID"]), "user-agent" => "desktop"));
$number--;
$pre_load->attachment = $pre_load->attachment + 1;
}
}else{
$pre_load->attachment = -1;
}
}
}
// PAGE
if(isset($current_order) && ($current_order == "page" || $current_order == "go")){
if($number > 0 && isset($pre_load->page) && $pre_load->page > -1){
global $wpdb;
$pages = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$wpdb->prefix."posts.post_type = 'page') AND ((".$wpdb->prefix."posts.post_status = 'publish')) ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->page.", ".$number, ARRAY_A);
if(count($pages) > 0){
foreach ($pages as $key => $page) {
if($mobile_theme){
array_push($urls, array("url" => get_page_link($page["ID"]), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => get_page_link($page["ID"]), "user-agent" => "desktop"));
$number--;
$pre_load->page = $pre_load->page + 1;
}
}else{
$pre_load->page = -1;
}
}
}
// CATEGORY
if(isset($current_order) && ($current_order == "category" || $current_order == "go")){
if($number > 0 && isset($pre_load->category) && $pre_load->category > -1){
$categories = get_terms(array(
'taxonomy' => array('category'),
'orderby' => 'id',
'order' => 'ASC',
'hide_empty' => false,
'number' => $number,
'fields' => 'all',
'pad_counts' => false,
'offset' => $pre_load->category
));
if(count($categories) > 0){
foreach ($categories as $key => $category) {
$term_link = get_term_link($category->slug, $category->taxonomy);
if(isset($term_link->errors)){
continue;
}
if($mobile_theme){
array_push($urls, array("url" => $term_link, "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => $term_link, "user-agent" => "desktop"));
$number--;
$pre_load->category = $pre_load->category + 1;
}
}else{
$pre_load->category = -1;
}
}
}
// TAG
if(isset($current_order) && ($current_order == "tag" || $current_order == "go")){
if($number > 0 && isset($pre_load->tag) && $pre_load->tag > -1){
$tags = get_terms(array(
'taxonomy' => array('post_tag'),
'orderby' => 'id',
'order' => 'ASC',
'hide_empty' => false,
'number' => $number,
'fields' => 'all',
'pad_counts' => false,
'offset' => $pre_load->tag
));
if(count($tags) > 0){
foreach ($tags as $key => $tag) {
if($mobile_theme){
array_push($urls, array("url" => get_term_link($tag->slug, $tag->taxonomy), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => get_term_link($tag->slug, $tag->taxonomy), "user-agent" => "desktop"));
$number--;
$pre_load->tag = $pre_load->tag + 1;
}
}else{
$pre_load->tag = -1;
}
}
}
// Custom Taxonomies
if(isset($current_order) && ($current_order == "customTaxonomies" || $current_order == "go")){
if($number > 0 && isset($pre_load->customTaxonomies) && $pre_load->customTaxonomies > -1){
$taxo = get_taxonomies(array('public' => true, '_builtin' => false), "names", "and");
if(count($taxo) > 0){
$custom_taxos = get_terms(array(
'taxonomy' => array_values($taxo),
'orderby' => 'id',
'order' => 'ASC',
'hide_empty' => false,
'number' => $number,
'fields' => 'all',
'pad_counts' => false,
'offset' => $pre_load->customTaxonomies
));
if(count($custom_taxos) > 0){
foreach ($custom_taxos as $key => $custom_tax) {
if($mobile_theme){
array_push($urls, array("url" => get_term_link($custom_tax->slug, $custom_tax->taxonomy), "user-agent" => "mobile"));
$number--;
}
array_push($urls, array("url" => get_term_link($custom_tax->slug, $custom_tax->taxonomy), "user-agent" => "desktop"));
$number--;
$pre_load->customTaxonomies = $pre_load->customTaxonomies + 1;
}
}else{
$pre_load->customTaxonomies = -1;
}
}else{
$pre_load->customTaxonomies = -1;
}
}
}
if(isset($pre_load->$current_order) && $pre_load->$current_order == -1){
array_shift($order_arr);
if(isset($order_arr[0])){
$pre_load->order = implode(",", $order_arr);
update_option("WpFastestCachePreLoad", json_encode($pre_load));
self::create_preload_cache($options);
}else{
unset($pre_load->order);
}
}
if(count($urls) > 0){
foreach ($urls as $key => $arr) {
$user_agent = "";
if($arr["user-agent"] == "desktop"){
$user_agent = "WP Fastest Cache Preload Bot";
}else if($arr["user-agent"] == "mobile"){
$user_agent = "WP Fastest Cache Preload iPhone Mobile Bot";
}
if(self::is_excluded($arr["url"])){
$status = "<strong style=\"color:blue;\">Excluded</strong>";
}else{
if($GLOBALS["wp_fastest_cache"]->wpfc_remote_get($arr["url"], $user_agent)){
$status = "<strong style=\"color:lightgreen;\">OK</strong>";
}else{
$status = "<strong style=\"color:red;\">ERROR</strong>";
}
}
echo $status." ".esc_html($arr["url"])." (".esc_html($arr["user-agent"]).")<br>";
}
echo "<br>";
echo count($urls)." page have been cached";
update_option("WpFastestCachePreLoad", json_encode($pre_load));
echo "<br><br>";
self::statistic($pre_load);
}else{
if(isset($options->wpFastestCachePreload_restart)){
foreach ($pre_load as $pre_load_key => &$pre_load_value) {
//if($pre_load_key != "number" && $pre_load_key != "order"){
if($pre_load_key != "number"){
$pre_load_value = 0;
}
}
update_option("WpFastestCachePreLoad", json_encode($pre_load));
echo "Preload Restarted";
if($varnish_datas = get_option("WpFastestCacheVarnish")){
include_once('varnish.php');
VarnishWPFC::purge_cache($varnish_datas);
}
include_once('cdn.php');
CdnWPFC::cloudflare_clear_cache();
}else{
echo "Completed";
wp_clear_scheduled_hook("wp_fastest_cache_Preload");
}
}
}
public static function prepare_sitemap($url, $sitemap_cache_path){
if(!empty($url)){
$content = $GLOBALS["wp_fastest_cache"]->wpfc_remote_get($url, "xxxx", true);
$content = strtolower($content);
$content = preg_replace("/<\?\s*xml[^\>]*>/i", "", $content);
// to remove comments
$content = preg_replace("/\<\!\-\-((?:(?!-->).)+)\-\-\>/", "", $content);
$content = preg_replace("/<((?:(?!url|loc).)+)>((?:(?!http).)+)<((?:(?!url|loc).)+)>/i", "", $content);
// to remove <image:image></image:image> tag
$content = preg_replace("/<\s*image\s*:\s*image\s*>((?:(?!\<\s*\/\s*image\s*:\s*image\s*>).)+)<\s*\/\s*image\s*\:\s*image\s*>/s", "", $content);
if(preg_match("/<\s*sitemapindex[^\>]+>/", $content)){
$content = preg_replace("/<\/?sitemapindex[^\>]*>/i", "", $content);
$content = preg_replace("/\s/i", "", $content);
$content = preg_replace("/<\/sitemap>/i", "</sitemap>\n", $content);
}else{
$content = preg_replace("/<\/?urlset[^\>]*>/i", "", $content);
$content = preg_replace("/\s/i", "", $content);
$content = preg_replace("/<\/url>/i", "</url>\n", $content);
}
if(!is_dir($GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/"))){
@mkdir($GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/"), 0755, true);
}
if(!is_dir($GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/preload-sitemap"))){
@mkdir($GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/preload-sitemap"), 0755, true);
}
file_put_contents($sitemap_cache_path, $content);
return $content;
}
return false;
}
public static function extract_sitemap_index($content, $sitemaps){
if($content){
preg_match_all("/<sitemap><loc>([^\>\<]+)<\/loc><\/sitemap>/", $content, $out);
if(isset($out[1]) && isset($out[1][0])){
foreach ($out[1] as $key => $value) {
$sm_obj = (object) array("url" => $value, "pointer" => 0, "total" => 0);
if(!in_array($value, array_column($sitemaps, 'url'))){
array_push($sitemaps, $sm_obj);
}
}
}
}
return $sitemaps;
}
public static function create_preload_cache_sitemap($pre_load, $options){
if(!isset($pre_load->sitemaps[0])){
die("No sitemap detected!");
}
if(defined("WPFC_PRELOAD_NUMBER") && WPFC_PRELOAD_NUMBER){
$number = WPFC_PRELOAD_NUMBER;
}else{
$number = $options->wpFastestCachePreload_number;
}
$urls = array();
if(isset($options->wpFastestCacheMobileTheme) && $options->wpFastestCacheMobileTheme){
$mobile_theme = true;
$number = round($number/2);
}else{
$mobile_theme = false;
}
foreach ($pre_load->sitemaps as $s_key => &$s_value) {
$sitemap_cache_path = $GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/preload-sitemap/".base64_encode($s_value->url).".xml");
if(!file_exists($sitemap_cache_path) || !isset($s_value->total)){
$content = self::prepare_sitemap($s_value->url, $sitemap_cache_path);
$s_value->total = substr_count($content, '<url>');
if($s_value->total == 0){
$pre_load->sitemaps = self::extract_sitemap_index($content, $pre_load->sitemaps);
unset($pre_load->sitemaps[$s_key]);
$pre_load->sitemaps = array_values($pre_load->sitemaps);
update_option("WpFastestCachePreLoad", json_encode($pre_load));
die($s_value->url." was extracted");
}
}
$s_value->pointer = $s_value->pointer > 0 ? $s_value->pointer : 1;
if($s_value->pointer < $s_value->total){
$file = fopen($sitemap_cache_path, "r");
for ($i = 1; $i < $s_value->pointer; $i++) {
fgets($file);
}
for ($j=0; $j < $number; $j++) {
$specific_line = fgets($file);
$specific_line = strip_tags($specific_line);
$specific_line = trim($specific_line);
if($specific_line){
if($mobile_theme){
array_push($urls, array("url" => $specific_line, "user-agent" => "mobile"));
}
array_push($urls, array("url" => $specific_line, "user-agent" => "desktop"));
}
}
fclose($file);
$s_value->pointer = $s_value->pointer + $number;
$s_value->pointer = $s_value->pointer > $s_value->total ? $s_value->total : $s_value->pointer;
break;
}
}
if(count($urls) > 0){
foreach ($urls as $key => $arr) {
$user_agent = "";
if($arr["user-agent"] == "desktop"){
$user_agent = "WP Fastest Cache Preload Bot";
}else if($arr["user-agent"] == "mobile"){
$user_agent = "WP Fastest Cache Preload iPhone Mobile Bot";
}
if(self::is_excluded($arr["url"])){
$status = "<strong style=\"color:blue;\">Excluded</strong>";
}else{
if($GLOBALS["wp_fastest_cache"]->wpfc_remote_get($arr["url"], $user_agent)){
$status = "<strong style=\"color:lightgreen;\">OK</strong>";
}else{
$status = "<strong style=\"color:red;\">ERROR</strong>";
}
}
echo $status." ".esc_html($arr["url"])." (".esc_html($arr["user-agent"]).")<br>";
}
echo "\n\n<br><br>";
foreach ($pre_load->sitemaps as $sres_key => $sres_value) {
if(isset($sres_value->total)){
$cached_page_number = $sres_value->pointer;
if($sres_value->pointer == $sres_value->total){
$cached_page_number = $sres_value->pointer;
}else{
$cached_page_number--;
$cached_page_number = max($cached_page_number, 0);
}
echo esc_html($sres_value->url).": ".esc_html($cached_page_number)."/".esc_html($sres_value->total)."<br>\n";
}else{
echo esc_html($sres_value->url).": -<br>\n";
}
}
update_option("WpFastestCachePreLoad", json_encode($pre_load));
}else{
if(isset($options->wpFastestCachePreload_restart)){
foreach ($pre_load->sitemaps as $r_key => &$r_value) {
$r_value->pointer = 0;
}
update_option("WpFastestCachePreLoad", json_encode($pre_load));
echo "Preload Restarted";
// clearing the sitemap cache in order to get the latest sitemap updates
$GLOBALS["wp_fastest_cache"]->rm_folder_recursively($GLOBALS["wp_fastest_cache"]->getWpContentDir("/cache/all/preload-sitemap"));
if($varnish_datas = get_option("WpFastestCacheVarnish")){
include_once('varnish.php');
VarnishWPFC::purge_cache($varnish_datas);
}
include_once('cdn.php');
CdnWPFC::cloudflare_clear_cache();
}else{
echo "Completed";
wp_clear_scheduled_hook("wp_fastest_cache_Preload");
}
}
}
public static function create_preload_cache($options){
if(!isset($options->wpFastestCacheStatus)){
die("Cache System must be enabled");
}
if($data = get_option("WpFastestCachePreLoad")){
$pre_load = json_decode($data);
if(isset($pre_load->sitemaps)){
self::create_preload_cache_sitemap($pre_load, $options);
}else{
self::create_preload_cache_default($pre_load, $options);
}
}
if(isset($_GET) && isset($_GET["type"]) && $_GET["type"] == "preload"){
die();
}
}
public static function is_excluded($url){
if(!is_string($url)){
return false;
}
$request_url = parse_url($url, PHP_URL_PATH);
if($request_url){
$request_url = urldecode(trim($request_url, "/"));
}
if(!$request_url){
return false;
}
if(self::$exclude_rules === false){
if($json_data = get_option("WpFastestCacheExclude")){
self::$exclude_rules = json_decode($json_data);
}else{
self::$exclude_rules = array();
}
}
foreach((array)self::$exclude_rules as $key => $value){
if($value->prefix == "exact"){
if(strtolower($value->content) == strtolower($request_url)){
return true;
}
}else{
if($value->prefix == "startwith"){
$preg_match_rule = "^".preg_quote($value->content, "/");
}else if($value->prefix == "contain"){
$preg_match_rule = preg_quote($value->content, "/");
}
if(isset($preg_match_rule)){
if(preg_match("/".$preg_match_rule."/i", $request_url)){
return true;
}
}
}
}
return false;
}
}
?>

View File

@@ -0,0 +1,347 @@
<?php
class SinglePreloadWPFC{
public static $id = 0;
public static $urls = array();
public static function init($id = false){
if($id){
self::set_id($id);
}else if(isset($_GET["post"]) && $_GET["post"]){
self::set_id($_GET["post"]);
}
SinglePreloadWPFC::set_urls();
SinglePreloadWPFC::set_urls_with_terms();
}
public static function add_meta_box(){
add_meta_box(
'auto_cache_custom_meta_box', // this is HTML id
'Auto Cache Settings',
array("SinglePreloadWPFC", "auto_cache_custom_box_html"), // the callback function
array('page', 'post', 'product'),
'side',
'high'
);
}
public static function auto_cache_custom_box_html(){
$yes_selected = "";
$no_selected = "";
if($data = get_option("WpFastestCache_autocache")){
if($data == "yes"){
$yes_selected = "selected";
}else if($data == "no"){
$no_selected = "selected";
}
}else{
$no_selected = "selected";
}
?>
<p>
<label>Enable:</label>
<select data-type='auto-cache-enable'>
<option <?php echo $yes_selected; ?> value="yes">Yes</option>
<option <?php echo $no_selected; ?> value="no">No</option>
</select>
<span class="spinner" style="float: none;display: inline-block;margin:0;"></span>
</p>
<p id="wpfc-single-preload-process" style="display: none;">
<label>Status: <span id="wpfc-single-preload-status-runnig">Running</span><span id="wpfc-single-preload-status-completed" style="display: none; color: #33CD32; font-weight: bold;">Completed</span></label><br>
<label>Total: <span id="wpfc-single-preload-total-number"><?php echo count(self::$urls); ?></span></label><br>
<label>Cached: <span id="wpfc-single-preload-cached-number">0</span></label><br>
<label>Errors: <span id="wpfc-single-preload-error-number">0</span></label>
</p>
<p class="post-attributes-help-text">The cache will be created automatically after the contents are saved. <a href="https://www.wpfastestcache.com/features/automatic-cache/" target="_blank">More Info</a></p>
<script type="text/javascript">
var Wpfc_Single_Preload_save_settings = function(){
var enable_form = jQuery("#auto_cache_custom_meta_box select[data-type='auto-cache-enable']");
if(enable_form.length == 1){
enable_form.change(function(){
enable_form.attr("disabled", true);
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "visible"});
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {"action": "wpfc_preload_single_save_settings", "is_enable": jQuery(this).val(), "nonce" : wpfc_nonce},
dataType: "json",
cache: false,
success: function(data){
enable_form.attr("disabled", false);
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "hidden"});
console.log(data);
},
error: function(error){
enable_form.attr("disabled", false);
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "hidden"});
console.log(error.statusText);
}
});
});
}
};
Wpfc_Single_Preload_save_settings();
</script>
<?php
// Add the HTML for the post meta
}
public static function save_settings(){
if(current_user_can('manage_options')){
$res = array("success" => true);
if(get_option("WpFastestCache_autocache")){
update_option("WpFastestCache_autocache", sanitize_text_field($_POST["is_enable"]));
}else{
add_option("WpFastestCache_autocache", sanitize_text_field($_POST["is_enable"]), null, "yes");
}
wp_send_json($res);
}
wp_die("Must be admin");
}
public static function set_id($id) {
$id = (int)$id;
if(get_post_status($id) === "publish"){
self::$id = $id;
}
}
public static function create_cache_for_all_urls(){
if(preg_match("/include\s*\(\s*[\'\"]\/themes\//i", wp_debug_backtrace_summary())){
return array("success" => false, "error_message" => "You cannot call this function in any theme file");
}
if(empty(self::$urls)){
return false;
}
$res_arr = array();
foreach (self::$urls as $url) {
$res = $GLOBALS["wp_fastest_cache"]->wpfc_remote_get($url["url"], $url["user-agent"]);
array_push($res_arr, array("url" => $url["url"], "success" => $res));
}
return $res_arr;
}
public static function create_cache(){
$res = $GLOBALS["wp_fastest_cache"]->wpfc_remote_get($_GET["url"], $_GET["user_agent"]);
if($res){
die("true");
}
}
public static function is_mobile_active(){
if(isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheMobile) && isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheMobileTheme)){
return true;
}else{
return false;
}
}
public static function set_term_urls($term_taxonomy_id){
$term = get_term_by("term_taxonomy_id", $term_taxonomy_id);
if($term && !is_wp_error($term)){
$url = get_term_link($term->term_id, $term->taxonomy);
array_push(static::$urls, array("url" => $url, "user-agent" => "WP Fastest Cache Preload Bot"));
if(self::is_mobile_active()){
array_push(static::$urls, array("url" => $url, "user-agent" => "WP Fastest Cache Preload iPhone Mobile Bot"));
}
if($term->parent > 0){
$parent = get_term_by("id", $term->parent, $term->taxonomy);
static::set_term_urls($parent->term_taxonomy_id);
}
}
}
public static function set_urls_with_terms(){
global $wpdb;
$terms = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."term_relationships` WHERE `object_id`=".static::$id, ARRAY_A);
foreach ($terms as $term_key => $term_val){
static::set_term_urls($term_val["term_taxonomy_id"]);
}
}
public static function set_urls(){
if(static::$id){
$permalink = get_permalink(static::$id);
array_push(static::$urls, array("url" => $permalink, "user-agent" => "WP Fastest Cache Preload Bot"));
if(self::is_mobile_active()){
array_push(static::$urls, array("url" => $permalink, "user-agent" => "WP Fastest Cache Preload iPhone Mobile Bot"));
}
}
}
public static function put_inline_js(){
if($data = get_option("WpFastestCache_autocache")){
if($data == "no"){
return false;
}
}else{
return false;
}
?>
<script type="text/javascript">
var WpfcSinglePreload = {
error_message: "",
init: function(){
jQuery("#wpfc-single-preload-process").show("slow")
},
change_status: function(){
var error_number = jQuery("#wpfc-single-preload-error-number").text();
var cached_number = jQuery("#wpfc-single-preload-cached-number").text();
var total_number = jQuery("#wpfc-single-preload-total-number").text();
error_number = parseInt(error_number);
cached_number = parseInt(cached_number);
total_number = parseInt(total_number);
if(total_number == (cached_number + error_number)){
jQuery("#wpfc-single-preload-status-completed").show();
jQuery("#wpfc-single-preload-status-runnig").hide();
}
},
increase_error: function(){
var number = jQuery("#wpfc-single-preload-error-number").text();
number = parseInt(number) + 1;
jQuery("#wpfc-single-preload-error-number").text(number);
WpfcSinglePreload.change_status();
},
increase_cached: function(){
var number = jQuery("#wpfc-single-preload-cached-number").text();
number = parseInt(number) + 1;
jQuery("#wpfc-single-preload-cached-number").text(number);
WpfcSinglePreload.change_status();
},
running_animation: function(){
let label = jQuery("#wpfc-single-preload-status-runnig");
let text = label.text();
let dot = 0;
label.text(text + ".");
self.interval = setInterval(function(){
text = label.text();
dot = text.match(/\./g);
if(dot){
if(dot.length < 3){
label.text(text + ".");
}else{
label.text(text.replace(/\.+$/, ""));
}
}else{
label.text(text + ".");
}
}, 300);
},
create_cache: function(list){
var action = function(url, user_agent, list){
var self = this;
jQuery("#wpfc-single-preload").show();
jQuery.ajax({
type: 'GET',
url: ajaxurl,
data: {"action": "wpfc_preload_single", "url": url, "user_agent": user_agent, "nonce" : wpfc_nonce},
dataType: "html",
timeout: 10000,
cache: false,
success: function(data){
if(data == "true"){
WpfcSinglePreload.increase_cached();
}else{
self.error_message = data;
WpfcSinglePreload.increase_error();
}
if(typeof list == "object"){
WpfcSinglePreload.create_cache(list);
}
},
error: function(error){
self.error_message = error.statusText;
WpfcSinglePreload.increase_error();
if(typeof list == "object"){
WpfcSinglePreload.create_cache(list);
}
}
});
};
let number_to_used = 3;
let sliced = list.slice(0, number_to_used);
list.splice(0, number_to_used);
jQuery.each(sliced, function( index, value ) {
console.log( value["url"] );
if(index == (number_to_used-1)){
setTimeout(function(){
action(value["url"], value["user-agent"], list);
}, 500);
}else{
setTimeout(function(){
action(value["url"], value["user-agent"], false);
}, 500);
}
});
}
};
jQuery(document).ready(function(){
if(!jQuery("#auto_cache_custom_meta_box").is(":visible")){
return;
}
if(jQuery("#message").find("a").attr("href")){
WpfcSinglePreload.init();
WpfcSinglePreload.running_animation();
WpfcSinglePreload.create_cache(<?php echo json_encode(self::$urls); ?>);
}
});
</script>
<?php
}
}
?>

View File

@@ -0,0 +1,178 @@
<?php
class VarnishWPFC{
public static function purge_cache($data = false) {
if(isset($GLOBALS["wpfc_varnish_purge_cache_executed"])){
return;
}else{
$GLOBALS["wpfc_varnish_purge_cache_executed"] = true;
}
if(gettype($data) == "array"){
// Clearing page cache action sends the data as Array
if(isset($data["status"]) && $data["status"] == "pause"){
return array("success" => true);
}
$server = $data["server"];
}else{
// Ajax request and save() function send the data as string
$server = $data;
}
$home = get_option('home');
$host = preg_replace("/(https?\:\/\/)(.+)/", "$2", $home);
$host = preg_replace("/\/.*/", "", $host);
$schema = preg_replace("/(https?\:\/\/).+/", "$1", $home);
$schema = strtolower($schema);
$ssl_verification = $schema == 'https://' ? true : false;
$request_url = $schema.$server."/.*";
$request_args = array(
'method' => "PURGE",
'headers' => array(
'Host' => $host,
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
),
'sslverify' => $ssl_verification,
);
$response = wp_remote_request($request_url, $request_args );
if(is_wp_error( $response ) || $response['response']['code'] != '200'){
if($schema === 'https://'){
$request_url = str_replace("https://", "http://", $request_url);
}else{
$request_url = str_replace("http://", "https://", $request_url);
}
$response = wp_remote_request($request_url, $request_args );
if(is_wp_error( $response ) || $response['response']['code'] != '200'){
if($response->get_error_messages()){
return array("success" => "", "message" => $response->get_error_message());
}
if($response['response']['code'] == "501"){
$text = '"Purge" method is not allowed';
if(isset($response['headers']['allow'])){
$text = $text.". The allowed methods are ".$response['headers']['allow'];
$text = $text.". Please contact your hosting provider";
}
return array("success" => "", "message" => $text);
}
}
}
return array("success" => true);
}
public static function save(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-varnish-ajax-nonce')){
die( 'Security check' );
}
$_POST["server"] = sanitize_text_field($_POST["server"]);
$purce_res = self::purge_cache($_POST["server"]);
if(!$purce_res["success"]){
wp_send_json($purce_res);
}
$datas = get_option("WpFastestCacheVarnish");
if(!is_array($datas)){
$datas = array();
$datas["server"] = $_POST["server"];
add_option("WpFastestCacheVarnish", $datas, 1, "yes");
}else{
$datas["server"] = $_POST["server"];
update_option("WpFastestCacheVarnish", $datas, 1, "yes");
}
wp_send_json_success();
}
public static function status(){
$datas = get_option("WpFastestCacheVarnish");
if(is_array($datas)){
if(isset($datas["status"]) && $datas["status"] == "pause"){
echo "isConnected pause";
}else{
echo "isConnected";
}
}
}
public static function start(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-varnish-ajax-nonce')){
die( 'Security check' );
}
$datas = get_option("WpFastestCacheVarnish");
if(is_array($datas)){
unset($datas["status"]);
$purce_res = self::purge_cache($datas);
if(!$purce_res["success"]){
wp_send_json($purce_res);
}
update_option("WpFastestCacheVarnish", $datas, 1, "yes");
}
wp_send_json_success();
}
public static function pause(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-varnish-ajax-nonce')){
die( 'Security check' );
}
$datas = get_option("WpFastestCacheVarnish");
if(is_array($datas)){
$datas["status"] = "pause";
update_option("WpFastestCacheVarnish", $datas, 1, "yes");
}
wp_send_json_success();
}
public static function remove(){
if(!wp_verify_nonce($_POST["security"], 'wpfc-varnish-ajax-nonce')){
die( 'Security check' );
}
delete_option("WpFastestCacheVarnish");
wp_send_json_success();
}
}
?>

View File

@@ -0,0 +1,63 @@
<?php
class WpPollsForWpFc{
public function __construct(){
}
public function hook(){
add_action( 'wp_ajax_nopriv_wpfc_wppolls_ajax_request', array($this, "wpfc_wppolls_ajax_request"));
add_action( 'wp_ajax_wpfc_wppolls_ajax_request', array($this, "wpfc_wppolls_ajax_request"));
add_action( 'wp_footer', array($this, "wpfc_wp_polls") );
}
public function wpfc_wp_polls() { ?>
<script type="text/javascript">
jQuery(document).ready(function(){
var wpfcWpfcAjaxCall = function(polls){
if(polls.length > 0){
poll_id = polls.last().attr('id').match(/\d+/)[0];
jQuery.ajax({
type: 'POST',
url: pollsL10n.ajax_url,
dataType : "json",
data : {"action": "wpfc_wppolls_ajax_request", "poll_id": poll_id, "nonce" : "<?php echo wp_create_nonce('wpfcpoll'); ?>"},
cache: false,
success: function(data){
if(data === true){
poll_result(poll_id);
}else if(data === false){
poll_booth(poll_id);
}
polls.length = polls.length - 1;
setTimeout(function(){
wpfcWpfcAjaxCall(polls);
}, 1000);
}
});
}
};
var polls = jQuery('div[id^=\"polls-\"][id$=\"-loading\"]');
wpfcWpfcAjaxCall(polls);
});
</script><?php
}
public function wpfc_wppolls_ajax_request(){
if(wp_verify_nonce(esc_attr($_POST["nonce"]), 'wpfcpoll')){
$result = check_voted(esc_attr($_POST["poll_id"]));
if($result){
die("true");
}else{
die("false");
}
}else{
die("Expired: wpfcpoll");
}
}
}
?>

View File

@@ -0,0 +1 @@
Silence is golden.

View File

@@ -0,0 +1,59 @@
(function() {
tinymce.create('tinymce.plugins.Wpfc', {
wpfcNotHTML : '',
url: '',
init : function(ed, url) {
var self = this;
self.setUrl(url);
self.setWpfcNotHTML();
ed.addButton('wpfc', {
title : 'Block caching for this page',
cmd : 'wpfc',
image : self.url + "/icon.png"
});
ed.addCommand('wpfc', function() {
ed.execCommand('mceInsertContent', 0, self.wpfcNotHTML);
});
self._handleWpfcNOT(ed, url);
},
setUrl: function(url){
this.url = url.replace("../js","../images");
},
setWpfcNotHTML: function(){
this.wpfcNotHTML = '<img src="' + this.url + "/tinymce-wpfcnot.jpg" + '" class="mce-wp-wpfcnot" style="margin-right:95%;" />';
},
_handleWpfcNOT : function(ed, url) {
var self = this;
ed.onPostRender.add(function() {
if (ed.theme.onResolveName) {
ed.theme.onResolveName.add(function(th, o) {
if (o.node.nodeName == 'IMG') {
if ( ed.dom.hasClass(o.node, 'mce-wp-wpfcnot') ){
o.name = 'wpfcnot';
}
}
});
}
});
ed.onBeforeSetContent.add(function(ed, o) {
if ( o.content ) {
o.content = o.content.replace(/<\!--\s*\[wpfcNOT\]\s*-->/, self.wpfcNotHTML);
}
});
ed.onPostProcess.add(function(ed, o) {
if (o.get){
o.content = o.content.replace(/<img[^>]+>/g, function(im) {
if (im.indexOf('class="mce-wp-wpfcnot') !== -1) {
im = '<!--[wpfcNOT]-->';
}
return im;
});
}
});
}
});
tinymce.PluginManager.add( 'wpfc', tinymce.plugins.Wpfc );
})();

View File

@@ -0,0 +1,435 @@
var WpfcCDN = {
values: {"name" : "", "cdnurl" : "", "originurl" : "", "file_types" : "", "keywords" : "", "excludekeywords" : ""},
id : "",
nonce: "",
template_url : "",
content : "",
interval : false,
init: function(obj){
this.set_params(obj);
this.open_wizard();
},
check_conditions: function(action, current_page_number){
var self = this;
if(action == "next"){
if(current_page_number == 2){
self.check_url_exist();
}else{
return true;
}
}
},
set_params: function(obj){
this.id = obj.id;
this.nonce = obj.nonce;
this.template_url = obj.template_main_url + "/" + this.id + ".php";
if(obj.values){
this.values = obj.values;
}
},
open_wizard: function(){
var self = this;
if(jQuery("#wpfc-modal-" + self.id).length == 0){
self.load_template(function(){
self.fill_integration_fields();
self.set_buttons_action();
self.click_event_add_new_keyword_button();
self.add_new_keyword_keypress();
if(self.id == "other" || self.id == "cloudflare"){
self.show_page("next");
self.hide_button("back");
}
});
}
},
insert_keywords: function(modal, classname, keywords){
var self = this;
if(keywords){
jQuery.each(keywords.split(","), function( index, value ) {
jQuery('<li class="' + classname + '"><a class="keyword-label">' + value + '</a></li>').insertBefore(modal.find(".wpfc-add-new-keyword").closest("." + classname)).click(function(){
jQuery(this).remove();
});
});
}
},
fill_integration_fields: function(){
var self = this;
var modal;
jQuery(self.values).each(function(i, e){
modal = jQuery("#wpfc-wizard-" + e.id);
modal.find("input#cdn-url").val(e.cdnurl);
modal.find("select#cdn-url").val(e.cdnurl);
modal.find("#origin-url").val(e.originurl);
self.insert_keywords(modal, "keyword-item", e.keywords);
self.insert_keywords(modal, "keyword-item-exclude", e.excludekeywords);
if(e.file_types){
modal.find(".wpfc-checkbox-list input[type='checkbox']").attr("checked", false);
jQuery.each(e.file_types.split(","), function( index, value ) {
modal.find("#file-type-" + value).attr("checked", true);
});
}
});
},
add_new_keyword_keypress: function(){
jQuery(".wpfc-textbox-con .fixed-search input").keypress(function(e){
if(e.keyCode == 13){
var keyword = jQuery(e.target).val();
var keyword_type_class = jQuery(e.target).closest("li[class*='keyword-item']").attr("class");
jQuery(".wpfc-textbox-con").hide();
jQuery(e.target).val("");
jQuery('<li class="' + keyword_type_class + '"><a class="keyword-label">' + keyword + '</a></li>').insertBefore(jQuery(e.target).closest("." + keyword_type_class)).click(function(){
jQuery(this).remove();
});
}
});
},
click_event_add_new_keyword_button: function(){
jQuery(".wpfc-add-new-keyword").click(function(){
jQuery(this).next(".wpfc-textbox-con").show();
jQuery(this).next(".wpfc-textbox-con").find(".fixed-search input").focus();
});
},
set_buttons_action: function(){
var self = this;
var action = "";
var current_page, next_page, current_page_number;
var modal = jQuery("#wpfc-modal-" + self.id);
self.buttons();
modal.find("button.wpfc-dialog-buttons").click(function(e){
action = modal.find(e.currentTarget).attr("action");
current_page_number = modal.find(".wpfc-cdn-pages-container div.wiz-cont:visible").attr("wpfc-cdn-page");
if(action == "next"){
if(self.check_conditions("next", current_page_number)){
self.show_page("next");
}
}else if(action == "back"){
self.show_page("back");
}else if(action == "finish"){
self.save_integration();
}else if(action == "close"){
Wpfc_Dialog.remove();
}else if(action == "remove"){
self.remove_integration();
}else if(action == "pause"){
self.pause_integration();
}else if(action == "start"){
self.start_integration();
}
});
},
start_integration: function(){
var self = this;
var modal = jQuery("#wpfc-modal-" + self.id);
self.disable_button("start");
jQuery.ajax({
type: 'POST',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_start_cdn_integration", "id" : self.id, "nonce" : self.nonce},
success: function(res){
self.show_button("pause");
self.enable_button("pause");
self.hide_button("start");
jQuery("div[wpfc-cdn-name='" + self.id + "']").find("div.meta").removeClass("pause");
},
error: function(e) {
self.enable_button("start");
alert("unknown error");
}
});
},
pause_integration: function(){
var self = this;
var modal = jQuery("#wpfc-modal-" + self.id);
self.disable_button("pause");
jQuery.ajax({
type: 'POST',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_pause_cdn_integration", "id" : self.id, "nonce" : self.nonce},
success: function(res){
self.show_button("start");
self.enable_button("start");
self.hide_button("pause");
jQuery("div[wpfc-cdn-name='" + self.id + "']").find("div.meta").addClass("pause");
},
error: function(e) {
self.enable_button("pause");
alert("unknown error");
}
});
},
remove_integration: function(){
var self = this;
var modal = jQuery("#wpfc-modal-" + self.id);
self.disable_button("remove");
jQuery.ajax({
type: 'POST',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_remove_cdn_integration", "id" : self.id, "nonce" : self.nonce},
success: function(res){
self.values = jQuery.grep(self.values, function (e, i) {
if(e.id == self.id){
return false;
}
return true;
});
self.enable_button("remove");
jQuery("div.tab7 div[wpfc-cdn-name='" + self.id + "']").find("div.meta").removeClass("isConnected");
Wpfc_Dialog.remove();
console.log(res);
},
error: function(e) {
self.enable_button("remove");
alert("unknown error");
}
});
},
save_integration: function(){
var self = this;
var modal = jQuery("#wpfc-modal-" + self.id);
self.buttons();
self.values = {};
self.values.id = self.id;
self.disable_button("finish");
if(modal.find("input#cdn-url").length == 1){
self.values.cdnurl = modal.find("input#cdn-url").val();
}else if(modal.find("select#cdn-url").length == 1){
self.values.cdnurl = modal.find("select#cdn-url").val();
}
self.values.originurl = modal.find("input#origin-url").val();
self.values.file_types = modal.find(".wpfc-checkbox-list input[type='checkbox']:checked").map(function(){return this.value;}).get().join(",");
self.values.keywords = modal.find(".keyword-item-list li.keyword-item a.keyword-label").map(function(){return this.text;}).get().join(",");
self.values.excludekeywords = modal.find(".keyword-item-list li.keyword-item-exclude a.keyword-label").map(function(){return this.text;}).get().join(",");
jQuery.ajax({
type: 'POST',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_save_cdn_integration", "nonce" : self.nonce, "values" : self.values, "file_types" : self.values.file_types, "keywords" : self.values.keywords, "excludekeywords" : self.values.excludekeywords},
success: function(res){
jQuery("div[wpfc-cdn-name='" + self.id + "']").find("div.meta").addClass("isConnected");
self.enable_button("finish");
self.show_page("next");
console.log(res);
},
error: function(e) {
self.enable_button("finish");
alert("unknown error");
}
});
},
enable_button: function(button_type){
clearInterval(this.interval);
let self = this;
let modal = jQuery("#wpfc-modal-" + self.id);
let button = modal.find(".wpfc-dialog-buttons[action='" + button_type + "']");
button.attr("disabled", false);
button.text(button.text().replace(/\.+$/, ""));
},
disable_button: function(button_type){
let self = this;
let modal = jQuery("#wpfc-modal-" + self.id);
let button = modal.find(".wpfc-dialog-buttons[action='" + button_type + "']");
let text = button.text();
let dot = 0;
button.attr("disabled", true);
button.text(text + ".");
self.interval = setInterval(function(){
text = button.text();
dot = text.match(/\./g);
console.log(dot);
console.log(button);
if(dot){
if(dot.length < 3){
button.text(text + ".");
}else{
button.text(text.replace(/\.+$/, ""));
}
}else{
button.text(text + ".");
}
}, 300);
},
check_url_exist: function(){
var self = this;
var modal = jQuery("#wpfc-modal-" + self.id);
var cdn_url = modal.find("#cdn-url").val();
var origin_url = modal.find("#origin-url").val();
if(!cdn_url || !origin_url){
if(!cdn_url){
modal.find("#cdn-url").css("background-color", "red");
}else{
modal.find("#cdn-url").css("background-color", "white");
}
if(!origin_url){
modal.find("#origin-url").css("background-color", "red");
}else{
modal.find("#origin-url").css("background-color", "white");
}
return;
}else{
modal.find("#cdn-url").css("background-color", "white");
modal.find("#origin-url").css("background-color", "white");
}
modal.find("#cdn-url-loading").show();
modal.find(".wpfc-cdn-pages-container div.wiz-cont:visible #cdn-url").nextAll("label").html("");
jQuery.ajax({
type: 'GET',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_check_url", "url" : cdn_url, "origin_url" : origin_url, "type" : WpfcCDN.id, "nonce" : self.nonce},
success: function(res){
modal.find("#cdn-url-loading").hide();
if(res.success){
self.show_page("next");
modal.find("#cdn-url").css("background-color", "white");
modal.find("#origin-url").css("background-color", "white");
}else{
if(WpfcCDN.id == "cloudflare"){
modal.find("label.wiz-error-msg").html(res.error_message);
}else{
modal.find(".wpfc-cdn-pages-container div.wiz-cont:visible #cdn-url").nextAll("label").html(res.error_message);
}
}
},
error: function(e) {
modal.find("#cdn-url-loading").hide();
alert("unknown error");
}
});
},
show_page: function(type){
var current_page = jQuery("#wpfc-modal-" + this.id).find(".wpfc-cdn-pages-container div.wiz-cont:visible");
current_page.hide();
if(type == "next"){
current_page.next().show();
}else if(type == "back"){
current_page.prev().show();
}
this.buttons();
},
buttons: function(){
var self = this;
var current_page, next_pages;
current_page = jQuery("#wpfc-modal-" + this.id).find(".wpfc-cdn-pages-container div.wiz-cont:visible");
next_pages = current_page.nextAll(".wiz-cont");
jQuery(".wpfc-dialog-buttons[action]").hide();
jQuery(self.values).each(function(i, e){
if(e.id == self.id){
self.show_button("remove");
if(typeof e.status != "undefined" && e.status == "pause"){
self.show_button("start");
}else{
self.show_button("pause");
}
}
});
if(next_pages.length){
if(next_pages.length > 1){
self.show_button("next");
}else if(next_pages.length == 1){
self.show_button("finish");
}
if(jQuery("#wpfc-modal-" + this.id).find(".wpfc-cdn-pages-container div.wiz-cont:visible").attr("wpfc-cdn-page") > 1){
if(current_page.attr("wpfc-cdn-page") == 2){
if(self.id == "maxcdn"){
self.show_button("back");
}
}else{
self.show_button("back");
}
}
}else{
self.show_button("close");
}
},
show_button: function(type){
jQuery("#wpfc-modal-" + this.id + " .wpfc-dialog-buttons[action='" + type + "']").show();
},
hide_button: function(type){
jQuery("#wpfc-modal-" + this.id + " .wpfc-dialog-buttons[action='" + type + "']").hide();
},
load_template: function(callbak){
var self = this;
jQuery.ajax({
type: 'POST',
dataType: "json",
url: ajaxurl,
data : {"action": "wpfc_cdn_template", "id": self.id},
success: function(res){
jQuery("body").append(res.content);
Wpfc_Dialog.dialog("wpfc-modal-" + self.id);
callbak();
jQuery("#revert-loader-toolbar").hide();
},
error: function(e) {
alert("CDN Template Error");
}
});
}
};

View File

@@ -0,0 +1 @@
Silence is golden.

View File

@@ -0,0 +1,43 @@
if(window.attachEvent) {
window.attachEvent('onload', wpfc_column_button_action);
} else {
if(window.onload) {
var curronload_1 = window.onload;
var newonload_1 = function(evt) {
curronload_1(evt);
wpfc_column_button_action(evt);
};
window.onload = newonload_1;
} else {
window.onload = wpfc_column_button_action;
}
}
function wpfc_column_button_action(){
jQuery(document).ready(function(){
jQuery("a[id^='wpfc-clear-cache-link']").click(function(e){
var post_id = jQuery(e.target).attr("data-id");
var nonce = jQuery(e.target).attr("data-nonce");
jQuery("#wpfc-clear-cache-link-" + post_id).css('cursor', 'wait');
jQuery.ajax({
type: 'GET',
url: ajaxurl,
data : {"action": "wpfc_clear_cache_column", "id" : post_id, "nonce" : nonce},
dataType : "json",
cache: false,
success: function(data){
jQuery("#wpfc-clear-cache-link-" + post_id).css('cursor', 'pointer');
if(typeof data.success != "undefined" && data.success == true){
//
}else{
alert("Clear Cache Error");
}
}
});
return false;
});
});
}

View File

@@ -0,0 +1,141 @@
var WpfcDB = {
init: function(){
var self = this;
jQuery("#wpfc-db").change(function(e){
jQuery("#revert-loader-toolbar").show();
self.update();
});
if(jQuery(".tab8").is(":visible")){
jQuery("#revert-loader-toolbar").show();
self.update();
}
jQuery(function(){
self.update();
});
self.click_event_for_warnings();
self.click_event_for_auto_cleanup();
},
click_event_for_auto_cleanup: function(){
jQuery("#wpfc-auto-cleanup-option").change(function(){
let status = jQuery(this).val();
let nonce = jQuery("#wpfc-auto-cleanup-nonce").val();
jQuery("#revert-loader-toolbar").show();
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType : "json",
data : {"action": "wpfc_db_set_auto_cleanup", "status" : status, "nonce" : nonce},
cache: false,
success: function(data){
if(typeof data.status != "undefined"){
jQuery("#wpfc-auto-cleanup-option").val(data.status);
}else{
jQuery("#wpfc-auto-cleanup-option").val("off");
}
jQuery("#revert-loader-toolbar").hide();
console.log(data);
}
});
});
},
click_event_for_warnings: function(){
var self = this;
jQuery("div.tab8 div[wpfc-db-name]").click(function(e){
jQuery("#revert-loader-toolbar").show();
jQuery.ajax({
type: 'GET',
url: ajaxurl,
dataType : "json",
data : {"action": "wpfc_db_fix", "type": jQuery(this).attr("wpfc-db-name"), "nonce" : wpfc_nonce},
cache: false,
success: function(data){
if(data.success){
self.update();
}else{
jQuery("#revert-loader-toolbar").hide();
if(data.showupdatewarning){
Wpfc_New_Dialog.dialog("wpfc-modal-updatenow", {close: function(){
Wpfc_New_Dialog.clone.find("div.window-content input").each(function(){
if(jQuery(this).attr("checked")){
var id = jQuery(this).attr("action-id");
jQuery("div.tab1 div[template-id='wpfc-modal-updatenow'] div.window-content input#" + id).attr("checked", true);
}
});
Wpfc_New_Dialog.clone.remove();
}});
}else{
if(typeof data.message != "undefined" && data.message){
alert(data.message);
}else{
alert("DB Error");
}
}
}
}
});
});
},
update: function(){
var self = this;
jQuery.ajax({
type: 'GET',
url: ajaxurl,
dataType : "json",
data : {"action": "wpfc_db_statics", "nonce" : wpfc_nonce},
cache: false,
success: function(data){
jQuery.each(data, function(key, value){
jQuery(".tab8 div[wpfc-db-name='" + key + "'] span.db-number").css({'color': (value > 0) ? "red" : "#6BC359"});
jQuery(".tab8 div[wpfc-db-name='" + key + "'] span.db-number").text("(" + value + ")");
jQuery(".tab8 div[wpfc-db-name='" + key + "'] div.meta").attr('class', (value > 0) ? "meta warning" : "meta success");
});
if(data.all_warnings > 0){
jQuery("label[for='wpfc-db']").text("DB (" + data.all_warnings + ")");
}else{
jQuery("label[for='wpfc-db']").text("DB");
}
jQuery("#revert-loader-toolbar").hide();
}
});
}
};
// if(window.attachEvent) {
// window.attachEvent('onload', WpfcDB_init);
// } else {
// if(window.onload) {
// var curronload = window.onload;
// var newonload = function(evt) {
// curronload(evt);
// WpfcDB_init(evt);
// };
// window.onload = newonload;
// } else {
// window.onload = WpfcDB_init;
// }
// }
if(window.attachEvent){
window.attachEvent('onload', WpfcDB_init);
}else if(window.addEventListener){
window.addEventListener('load', WpfcDB_init, false);
}
function WpfcDB_init(){WpfcDB.init();}

View File

@@ -0,0 +1,48 @@
var Wpfc_Dialog = {
id : "",
buttons: [],
dialog: function(id, buttons){
var self = this;
self.id = id;
self.buttons = buttons;
jQuery("#" + id).show();
jQuery("#" + id).draggable({
stop: function(){
jQuery(this).height("auto");
}
});
jQuery("#" + id).position({my: "center", at: "center", of: window});
jQuery(".close-wiz").click(function(e){
jQuery(e.target).closest("div[id^='wpfc-modal-']").remove();
});
self.show_buttons();
},
remove: function(clone_modal_id){
if(typeof clone_modal_id != "undefined"){
jQuery("#" + clone_modal_id).remove();
}else{
var self = this;
jQuery("#" + self.id).remove();
}
},
show_buttons: function(){
var self = this;
if(typeof self.buttons != "undefined"){
jQuery.each(self.buttons, function( index, value ) {
jQuery("#" + self.id + " button[action='" + index + "']").show();
jQuery("#" + self.id + " button[action='" + index + "']").click(function(e){
if(index == "close"){
jQuery(e.target).closest("div[id^='wpfc-modal-']").remove();
}else{
value();
}
});
});
}
}
};

View File

@@ -0,0 +1,249 @@
var Wpfc_New_Dialog = {
template_id: "",
id : "",
buttons: [],
clone: "",
current_page_number: 1,
total_page_number: 0,
interval : {},
enable_button: function(button_type){
clearInterval(this.interval[this.id]);
let self = this;
let modal = jQuery("#" + self.id);
let button = modal.find(".wpfc-dialog-buttons[action='" + button_type + "']");
button.attr("disabled", false);
button.text(button.text().replace(/\.+$/, ""));
},
disable_button: function(button_type){
let self = this;
let modal = jQuery("#" + self.id);
let button = modal.find(".wpfc-dialog-buttons[action='" + button_type + "']");
let text = button.text();
let dot = 0;
button.attr("disabled", true);
button.text(text + ".");
self.interval[self.id] = setInterval(function(){
if(jQuery("#" + self.id).length === 0){
clearInterval(self.interval);
}
text = button.text();
dot = text.match(/\./g);
console.log(self.interval);
if(dot){
if(dot.length < 3){
button.text(text + ".");
}else{
button.text(text.replace(/\.+$/, ""));
}
}else{
button.text(text + ".");
}
}, 300);
},
dialog: function(id, buttons, callback){
var self = this;
self.clone = jQuery("div[template-id='" + id + "']").clone();
self.total_page_number = self.clone.find("div[wpfc-page]").length;
self.total_page_number = self.total_page_number > 0 ? self.total_page_number : self.clone.find("div[wpfc-cdn-page]").length;
self.template_id = id;
self.id = id + "-" + new Date().getTime();
self.buttons = buttons;
self.clone.attr("id", self.id);
self.clone.removeAttr("template-id");
jQuery("body").append(self.clone);
self.clone.show();
self.clone.draggable({
stop: function(){
jQuery(this).height("auto");
}
});
self.clone.position({my: "center", at: "center", of: window});
self.clone.find(".close-wiz").click(function(){
self.remove(this);
});
self.update_ids_for_label();
self.show_buttons();
if(typeof callback != "undefined"){
if(typeof callback == "function"){
callback(self);
}
}
self.click_event_add_new_keyword_button();
self.add_new_keyword_keypress();
},
remove: function(button){
jQuery(button).closest("div[id^='wpfc-modal-']").remove();
},
show_buttons: function(){
var self = this;
if(typeof self.buttons != "undefined"){
jQuery.each(self.buttons, function( index, value ) {
self.clone.find("button[action='" + index + "']").click(function(){
if(value == "default"){
if(index == "next"){
self.default_next_action();
}
if(index == "back"){
self.default_back_action();
}
if(index == "close"){
self.default_close_action();
}
}else{
value(this);
}
});
});
}
},
default_next_action: function(){
this.current_page_number = this.current_page_number + 1;
this.show_page(this.current_page_number);
this.show_button("back");
if(this.total_page_number == this.current_page_number){
this.hide_button("next");
this.show_button("finish");
}
},
default_back_action: function(){
this.current_page_number = this.current_page_number - 1;
this.show_page(this.current_page_number);
this.show_button("next");
this.hide_button("finish");
if(this.current_page_number == 1){
this.hide_button("back");
}
},
default_close_action: function(){
Wpfc_New_Dialog.clone.remove();
},
show_button: function(index){
this.clone.find("button[action='" + index + "']").show();
},
hide_button: function(index){
this.clone.find("button[action='" + index + "']").hide();
},
show_page: function(number){
this.clone.find("div[wpfc-page], div[wpfc-cdn-page]").hide();
this.clone.find("div[wpfc-page='" + number + "'], div[wpfc-cdn-page='" + number + "']").show();
this.current_page_number = number;
},
update_ids_for_label: function(){
var self = this;
var input;
var id = "";
self.clone.find("div.window-content div.wiz-input-cont").each(function(){
input = jQuery(this).find("label.mc-input-label input");
if(input.length){
id = input.attr("id") + self.id;
jQuery(this).find("label.mc-input-label input").attr("id", id);
jQuery(this).find("label").last().attr("for", id);
}
});
},
set_values_from_tmp_to_real: function(){
var self = this;
Wpfc_New_Dialog.clone.find("div.window-content input, div.window-content select").each(function(){
if(jQuery(this).prop("tagName") == "SELECT"){
jQuery("div.tab1 div[template-id='" + self.template_id + "'] div.window-content select[name='" + jQuery(this).attr("name") + "']").val(jQuery(this).val());
}else if(jQuery(this).prop("tagName") == "INPUT"){
if(jQuery(this).attr("type") == "checkbox"){
if(jQuery(this).is(':checked')){
jQuery("div.tab1 div[template-id='" + self.template_id + "'] div.window-content input[name='" + jQuery(this).attr("name") + "']").attr("checked", true);
}else{
jQuery("div.tab1 div[template-id='" + self.template_id + "'] div.window-content input[name='" + jQuery(this).attr("name") + "']").attr("checked", false);
}
}else{
//toDo
}
}
});
},
add_new_keyword_keypress: function() {
const $clone = Wpfc_New_Dialog.clone;
const $input = $clone.find(".wpfc-textbox-con .fixed-search input");
const $textboxCon = $clone.find(".wpfc-textbox-con");
const insertKeywordItem = function(){
let keyword = $input.val().replace(/[\s,]/g, "");
$textboxCon.hide();
$input.val("");
if (keyword.length > 0) {
const $newKeywordItem = jQuery('<li class="keyword-item"><a class="keyword-label">' + keyword + '</a></li>').click(function() {
jQuery(this).remove();
});
$newKeywordItem.insertBefore($clone.find(".wpfc-add-new-keyword").closest(".keyword-item"));
}
};
$input.keydown(function(e) {
if (e.keyCode === 8) {
let keyword = $input.val().replace(/[\s,]/g, "");
if (keyword.length === 0) {
$textboxCon.hide();
}
} else if (e.keyCode === 13) {
insertKeywordItem();
}
});
$input.bind("blur", function() {
insertKeywordItem();
});
},
click_event_add_new_keyword_button: function(){
Wpfc_New_Dialog.clone.find(".wpfc-add-new-keyword").click(function(){
Wpfc_New_Dialog.clone.find(".wpfc-textbox-con").show();
Wpfc_New_Dialog.clone.find(".wpfc-textbox-con .fixed-search input").focus();
});
},
insert_keywords: function(id, keywords){
if(keywords){
jQuery.each(keywords.split(","), function( index, value ) {
jQuery('<li class="keyword-item"><a class="keyword-label">' + value + '</a></li>').insertBefore(jQuery("div[id^='" + id + "']").find(".wpfc-add-new-keyword").closest(".keyword-item")).click(function(){
jQuery(this).remove();
});
});
}
},
};

View File

@@ -0,0 +1 @@
Silence is golden.

View File

@@ -0,0 +1,37 @@
window.wpfc = {};
window.wpfc.translate = function(word){
return (typeof window.wpfc.dictionary != "undefined" && typeof window.wpfc.dictionary[word] != "undefined" && window.wpfc.dictionary[word]) ? window.wpfc.dictionary[word] : word;
};
jQuery.fn.extend({
wpfclang: function(){
var dictionary = window.wpfc.dictionary || {};
var el = jQuery(this);
var text = el.attr("type") == "submit" ? el.val().trim() : el.text().trim();
var converted = typeof dictionary[text] == "undefined" ? text : dictionary[text];
if(typeof converted != "undefined" && converted){
if(el.attr("type") == "submit"){
el.val(converted);
}else{
el.html(converted);
}
}
}
});
var Wpfclang = {
language : "",
init: function(language){
this.language = language;
this.translate();
},
translate: function(){
if(typeof window.wpfc != "undefined" && typeof window.wpfc.dictionary != "undefined"){
var self = this;
jQuery('#wpfc-read-tutorial span, #wpfc-plugin-setup-warning h3, #just-h1, #get-now-h1, #new-features-h1, div.wpfc-premium-step-footer ul li a, div.wpfc-premium-step-footer p, div.wpfc-premium-step-content, #wpbody-content label, div.question, .questionCon input[type="submit"], #message p, .wrap h2, #nextVerAct, select option, th, #rule-help-tip h4, #rule-help-tip label, .omni_admin_sidebar h3, #message p, #wpfc-image-static-panel span, #wpfc-statics-right div, #wpfc-image-static-panel p, #container-show-hide-image-list span, #wpfc-image-list th').each(function(){
if(jQuery(this).children().length === 0){
jQuery(this).wpfclang();
}
});
}
}
};

View File

@@ -0,0 +1,65 @@
var WpfcSchedule = {
id: "#wpfc-server-time",
serverTime : "", //milliseconds
dropdowns: "#wpFastestCacheTimeOutHour, #wpFastestCacheTimeOutMinute, #wpFastestCacheTimeOut",
init: function(){
if(jQuery("form[id='wpfc-schedule-panel']").length){
this.setServerTime();
this.clock();
this.setDropdownEvent();
this.setDeleteCronEvent();
jQuery("#wpfc-schedule-panel input[type='submit']").bind("click", this, this.submitButtonEvent);
}
},
setDeleteCronEvent: function(){
jQuery("#deleteCron").click(function(){
jQuery("#wpFastestCacheTimeOut").val("");
jQuery("form#wpfc-schedule-panel").submit();
});
},
setDropdownEvent: function(){
jQuery(this.dropdowns).change(function(e){
var e = jQuery(e.currentTarget);
if(e.attr("value")){
e.css("background-color", "");
}
/* if(e.attr("id") == "wpFastestCacheTimeOut"){
if(e.val() == "hourly"){
jQuery("#wpFastestCacheTimeOutHour, #wpFastestCacheTimeOutMinute").prop('disabled', true);
}else{
jQuery("#wpFastestCacheTimeOutHour, #wpFastestCacheTimeOutMinute").prop('disabled', false);
}
}*/
});
},
setServerTime: function(){
this.serverTime = new Date(jQuery(this.id).text()).getTime();
},
clock: function(){
var self = this;
var newDate;
setInterval(function(){
newDate = new Date(self.serverTime);
jQuery(self.id).text(newDate.getFullYear() + "-" + (newDate.getMonth() + 1) + "-" + newDate.getDate() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds());
self.serverTime = self.serverTime + 1000;
}, 1000);
},
submitButtonEvent: function(self){
var error_count = 0;
jQuery(self.data.dropdowns).each(function(i, e){
if(jQuery(e).attr("value")){
jQuery(e).css("background-color", "");
}else{
error_count++;
jQuery(e).css("background-color", "red");
}
});
return error_count > 0 ? false : true;
}
};
WpfcSchedule.init();

View File

@@ -0,0 +1,122 @@
var WPFC_TOOLBAR = {
ajax_url: false,
init: function(){
var self = this;
if(typeof ajaxurl != "undefined" || typeof wpfc_ajaxurl != "undefined"){
self.ajax_url = (typeof ajaxurl != "undefined") ? ajaxurl : wpfc_ajaxurl;
}else{
alert("AjaxURL has NOT been defined");
}
jQuery("body").append('<div id="revert-loader-toolbar"></div>');
jQuery("#wp-admin-bar-wpfc-toolbar-parent-default li").click(function(e){
var id = (typeof e.target.id != "undefined" && e.target.id) ? e.target.id : jQuery(e.target).parent("li").attr("id");
var action = "";
if(id == "wp-admin-bar-wpfc-toolbar-parent-settings"){
if(jQuery("div[id^='wpfc-modal-toolbarsettings-']").length === 0){
self.open_settings();
}
}else{
if(id == "wp-admin-bar-wpfc-toolbar-parent-delete-cache"){
action = "wpfc_delete_cache";
}else if(id == "wp-admin-bar-wpfc-toolbar-parent-delete-cache-and-minified"){
action = "wpfc_delete_cache_and_minified";
}else if(id == "wp-admin-bar-wpfc-toolbar-parent-clear-cache-of-this-page"){
action = "wpfc_delete_current_page_cache";
}else if(id == "wp-admin-bar-wpfc-toolbar-parent-clear-cache-of-allsites"){
action = "wpfc_clear_cache_of_allsites";
}
WPFC_TOOLBAR.send({"action": action, "path" : window.location.pathname});
}
});
},
open_settings: function(){
var self = this;
jQuery("#revert-loader-toolbar").show();
jQuery.ajax({
type: 'GET',
url: self.ajax_url,
data : {"action": "wpfc_toolbar_get_settings", "path" : window.location.pathname},
dataType : "json",
cache: false,
success: function(data){
if(data.success){
var data_json = {"action": "wpfc_toolbar_save_settings", "path" : window.location.pathname, "roles" : {}};
Wpfc_New_Dialog.dialog("wpfc-modal-toolbarsettings", {
close: function(){
Wpfc_New_Dialog.clone.remove();
},
finish: function(){
jQuery("#" + Wpfc_New_Dialog.id).find("input[type='checkbox']:checked").each(function(i, e){
data_json.roles[jQuery(e).attr("name")] = 1;
});
WPFC_TOOLBAR.send(data_json);
Wpfc_New_Dialog.clone.remove();
}}, function(dialog){
jQuery("#" + Wpfc_New_Dialog.id).find("input[type='checkbox']").each(function(i, e){
if(typeof data.roles[jQuery(e).attr("name")] != "undefined"){
jQuery(e).attr('checked', true);
}
});
Wpfc_New_Dialog.show_button("close");
Wpfc_New_Dialog.show_button("finish");
setTimeout(function(){
jQuery("#revert-loader-toolbar").hide();
}, 500);
});
}else{
alert("Toolbar Settings Error!")
}
}
});
},
send: function(data_json){
var self = this;
if(typeof wpfc_nonce != "undefined" && wpfc_nonce){
data_json.nonce = wpfc_nonce;
}
jQuery("#revert-loader-toolbar").show();
jQuery.ajax({
type: 'GET',
url: self.ajax_url,
data : data_json,
dataType : "json",
cache: false,
success: function(data){
if(data[1] == "error"){
if(typeof data[2] != "undefined" && data[2] == "alert"){
alert(data[0]);
}else{
Wpfc_New_Dialog.dialog("wpfc-modal-permission", {close: "default"});
Wpfc_New_Dialog.show_button("close");
}
}
if(typeof WpFcCacheStatics != "undefined"){
WpFcCacheStatics.update();
}else{
jQuery("#revert-loader-toolbar").hide();
}
}
});
}
};
window.addEventListener('load', function(){
jQuery(document).ready(function(){
WPFC_TOOLBAR.init();
});
});

View File

@@ -0,0 +1,628 @@
# Translation of Plugins - WP Fastest Cache - Development (trunk) in Czech
# This file is distributed under the same license as the Plugins - WP Fastest Cache - Development (trunk) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2025-02-25 22:35:47+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: cs_CZ\n"
"Project-Id-Version: Plugins - WP Fastest Cache - Development (trunk)\n"
#: templates/toolbar_settings.php:34
msgid "The WP Fastest Cache menu on the admin toolbar will be visible to the selected user roles below."
msgstr ""
#: templates/toolbar_settings.php:33
msgid "User Roles"
msgstr ""
#: templates/preload.php:374 templates/preload.php:457
#: templates/preload.php:474
msgid "At least one sitemap must be added"
msgstr ""
#: templates/preload.php:187
msgid "You can customize the advanced settings through this section."
msgstr ""
#: templates/preload.php:186
msgid "Advanced Settings"
msgstr "Pokročilá nastavení"
#: templates/preload.php:151
msgid "You can specify sitemaps to be used for preloading."
msgstr "Můžete určit mapy webu, které se mají použít pro předběžné načítání."
#: templates/preload.php:150
msgid "Sitemaps"
msgstr "Mapy webu"
#: templates/preload.php:87
msgid "You can specify the contents to be used for preloading and you can sort them as well."
msgstr ""
#: templates/preload.php:86
msgid "Content Types"
msgstr "Typy obsahu"
#: templates/preload.php:73
msgid "You can specify the method you want the preload feature to use through this section."
msgstr ""
#: templates/preload.php:72
msgid "Choose a Method"
msgstr "Vyberte metodu"
#: templates/preload.php:56
msgid "Preload Settings"
msgstr ""
#: inc/admin.php:1458 inc/admin.php:1465
msgid "Some js sources will not be loaded until scrolling or moving the mouse"
msgstr ""
#: inc/admin.php:1457 inc/admin.php:1464
msgid "Delay Js"
msgstr "Zpoždění Js"
#: inc/admin.php:1074
msgid "WP Fastest Cache Options"
msgstr "Nastavení WP Fastest Cache"
#: inc/admin.php:1954 templates/exclude.php:114
msgid "has Yandex Click ID Parameters"
msgstr ""
#. Author URI of the plugin
#: wpFastestCache.php
msgid "https://www.wpfastestcache.com/"
msgstr "https://www.wpfastestcache.com/"
#: inc/admin.php:1749
msgid "Clearing Specific Pages"
msgstr "Vymazat konkrétní stránky"
#: templates/toolbar_settings.php:71
msgid "Save"
msgstr "Uložit"
#: templates/toolbar_settings.php:68
msgid "Cancel"
msgstr "Storno"
#: inc/admin-toolbar.php:124 templates/toolbar_settings.php:20
msgid "Toolbar Settings"
msgstr "Nastavení panelu nástrojů"
#: inc/admin-toolbar.php:78 inc/admin-toolbar.php:114
msgid "Clear Cache of All Sites"
msgstr "Vymazat cache paměť všech webů."
#: wpFastestCache.php:439
msgid "<a href=\"%s\">Settings</a>"
msgstr "<a href=\"%s\">Nastavení</a>"
#: inc/admin.php:1083 inc/admin.php:1594 inc/column.php:15
msgid "Clear Cache"
msgstr "Vymazat cache paměť"
#: inc/admin.php:1370 inc/admin.php:1376 inc/admin.php:1383
msgid "Eliminate render-blocking JavaScript resources"
msgstr "Odstranit zdroje JavaScriptu blokující vykreslení"
#: inc/admin.php:470 inc/admin.php:473
msgid "Options have been saved"
msgstr "Nastavení byla uložena."
#: inc/admin.php:1955 templates/exclude.php:115
msgid "has Woocommerce Items in Cart"
msgstr "má položky Woocommerce v košíku"
#: inc/admin.php:1953 templates/exclude.php:113
msgid "has Google Analytics Parameters"
msgstr "obsahuje parametry Google Analytics"
#: inc/admin.php:1943 templates/exclude.php:100
msgid "Archives"
msgstr "Archivy"
#: templates/timeout.php:189
msgid "Server Time"
msgstr "Čas serveru"
#: templates/timeout.php:169
msgid "delete the files"
msgstr "odstranit soubory"
#: inc/admin.php:1646 inc/admin.php:1948 templates/exclude.php:106
#: templates/timeout.php:99
msgid "Contains"
msgstr "Obsahuje"
#: inc/admin.php:1647 inc/admin.php:1949 templates/exclude.php:107
#: templates/timeout.php:98
msgid "Is Equal To"
msgstr "Je rovný"
#: inc/admin.php:1645 inc/admin.php:1947 templates/exclude.php:105
#: templates/timeout.php:97
msgid "Starts With"
msgstr "Začíná na"
#: inc/admin.php:1644 inc/admin.php:1940 templates/exclude.php:95
#: templates/timeout.php:96
msgid "Home Page"
msgstr "Úvodní stránka"
#: inc/admin.php:1643 templates/timeout.php:95
msgid "All"
msgstr "Vše"
#: templates/exclude.php:66
msgid "Exclude Page Wizard"
msgstr "Vyloučit průvodce stránkou"
#: templates/timeout.php:124
msgid "Then"
msgstr "Pak"
#: templates/exclude.php:89 templates/timeout.php:91
msgid "If REQUEST_URI"
msgstr "Pokud REQUEST_URI"
#: templates/timeout.php:68
msgid "Cache Timeout Wizard"
msgstr "Průvodce vypršením časového limitu cache paměti"
#: templates/lazy_load.php:9
msgid "Lazy Load Settings"
msgstr "Nastavení pomalého načítání (\"lazy load\")"
#: templates/nginx_gzip.php:9
msgid "Enable Gzip"
msgstr "Povolit Gzip"
#: templates/update_now.php:9
msgid "Please Update"
msgstr "Prosím aktualizujte"
#: templates/update_success.php:9
msgid "Success"
msgstr "Hotovo"
#: templates/disable_wp_cron.php:20
msgid "Warning"
msgstr "Varování"
#: inc/admin.php:1681 inc/admin.php:1753 inc/admin.php:1976 inc/admin.php:1993
#: inc/admin.php:2012 inc/admin.php:2030 inc/admin.php:2050
msgid "Add New Rule"
msgstr "Přidat nové pravidlo"
#: inc/admin-toolbar.php:105 inc/admin.php:1615
msgid "Clear Cache and Minified CSS/JS"
msgstr "Smazat cache paměť a minifikovat CSS/JS"
#: inc/admin.php:1547 inc/admin.php:2219 inc/admin.php:2419
msgid "Only available in Premium version"
msgstr "Dostupné pouze v Premium verzi"
#: templates/timeout.php:141
msgid "Choose One"
msgstr "Vyber jeden"
#: inc/admin.php:1620
msgid "All cache files will be removed as well"
msgstr "Všechny soubory cache paměti budou také odstraněny"
#: inc/admin.php:1619
msgid "If you modify any css file, you have to delete minified css files"
msgstr "Pokud upravíte jakýkoli CSS soubor, musíte odstranit minifikované CSS soubory"
#: inc/admin.php:1607 inc/admin.php:1621 inc/admin.php:1622
msgid "Target folder"
msgstr "Cílová složka"
#: inc/admin.php:1606
msgid "You can delete all cache files"
msgstr "Můžete smazat všechny soubory cache paměti"
#: inc/admin.php:1090
msgid "Exclude"
msgstr "Vyloučit"
#: inc/admin.php:1084
msgid "Image Optimization"
msgstr "Optimalizace obrázku"
#: inc/admin.php:1082
msgid "Settings"
msgstr "Nastavení"
#: inc/admin.php:2192
msgid "Database Cleanup"
msgstr "Vyčištění databáze"
#: inc/admin.php:2083
msgid "CDN Settings"
msgstr "CDN nastavení "
#: inc/admin.php:2046
msgid "Exclude JS"
msgstr "Vyloučit JS"
#: inc/admin.php:2026
msgid "Exclude CSS"
msgstr "Vyloučit CSS"
#: inc/admin.php:2008
msgid "Exclude Cookies"
msgstr "Vyloučit cookies"
#: inc/admin.php:1989
msgid "Exclude User-Agents"
msgstr "Vyloučit uživatelské agenty"
#: inc/admin.php:1972
msgid "Exclude Pages"
msgstr "Vyloučit stránky"
#: inc/admin.php:1806
msgid "Optimize Image Tool"
msgstr "Nástroj pro optimalizaci obrázků"
#: inc/admin.php:1636
msgid "Timeout Rules"
msgstr "Pravidla časového limitu"
#: inc/admin.php:1554
msgid "Cache Statistics"
msgstr "Statistiky cache paměti"
#: templates/updatepost.php:53
msgid "Clear Cache of Post / Page"
msgstr "Vymazat cache paměť příspěvku / stránky"
#: templates/updatepost.php:29
msgid "What do you want to happen after update a post or a page?"
msgstr "Co se má stát po aktualizaci příspěvku nebo stránky?"
#: templates/newpost.php:58
msgid "Clear Cache of Pagination"
msgstr "Vymazat cache paměť stránkování"
#: templates/newpost.php:57 templates/updatepost.php:55
msgid "Clear Cache of Post Tags"
msgstr "Vymazat cache paměť tagů příspěvků"
#: templates/newpost.php:56 templates/updatepost.php:54
msgid "Clear Cache of Post Categories"
msgstr "Vymazat cache paměť kategorie příspěvků"
#: templates/newpost.php:55 templates/updatepost.php:56
msgid "Clear Cache of Home page"
msgstr "Vymazat cache paměť domovské stránky"
#: inc/admin-toolbar.php:61 inc/admin-toolbar.php:97 inc/admin.php:1602
#: templates/newpost.php:51 templates/updatepost.php:49
msgid "Clear All Cache"
msgstr "Vymazat všechny cache paměti"
#: templates/newpost.php:29
msgid "What do you want to happen after publishing the new post?"
msgstr "Co se má stát po zveřejnění nového příspěvku?"
#: templates/newpost.php:68 templates/updatepost.php:64
msgid "OK"
msgstr "OK"
#: templates/preload.php:215
msgid "Restart After Completed"
msgstr "Po dokončení restartujte počítač"
#: templates/preload.php:210
msgid "pages per minute"
msgstr "stránek za minutu"
#: templates/preload.php:132
msgid "Custom Taxonomies"
msgstr "Vlastní taxonomie"
#: templates/preload.php:127
msgid "Custom Post Types"
msgstr "Vlastní typy příspěvku"
#: inc/admin.php:1946 templates/exclude.php:101 templates/preload.php:122
msgid "Attachments"
msgstr "Přílohy"
#: inc/admin.php:1942 templates/exclude.php:97 templates/preload.php:118
msgid "Tags"
msgstr "Tagy"
#: inc/admin.php:1945 templates/exclude.php:99 templates/preload.php:114
msgid "Pages"
msgstr "Stránky"
#: inc/admin.php:1941 templates/exclude.php:96 templates/preload.php:110
msgid "Categories"
msgstr "Kategorie"
#: inc/admin.php:1944 templates/exclude.php:98 templates/preload.php:106
msgid "Posts"
msgstr "Příspěvky"
#: templates/preload.php:102
msgid "Homepage"
msgstr "Domovská stránka"
#: inc/admin.php:1317 inc/admin.php:1325 inc/admin.php:1331 inc/admin.php:1337
msgid "Reduce HTTP requests through combined js files"
msgstr "Snížit požadavky HTTP prostřednictvím kombinovaných JS souborů"
#: inc/admin.php:1425 inc/admin.php:1447
msgid "Load images and iframes when they enter the browsers viewport"
msgstr "Načíst obrázky a prvky iframe při vstupu do výřezu prohlížeče"
#: inc/admin.php:1396 inc/admin.php:1402 inc/admin.php:1409
msgid "Load Google Fonts asynchronously"
msgstr "Načíst Google fonty asynchronně"
#: inc/admin.php:1395 inc/admin.php:1401 inc/admin.php:1408
msgid "Google Fonts"
msgstr "Google Fonty"
#: inc/admin.php:1369 inc/admin.php:1375 inc/admin.php:1382
msgid "Render Blocking Js"
msgstr "JS blokující vykreslování"
#: inc/admin.php:1361
msgid "You can remove the emoji inline css and wp-emoji-release.min.js"
msgstr "Můžete odstranit inline CSS pro emodži a wp-emoji-release.min.js"
#: inc/admin.php:1360
msgid "Disable Emojis"
msgstr "Zakázat Emodži"
#: inc/admin.php:1355
msgid "Reduce page load times for repeat visitors"
msgstr "Snižte dobu načítání stránky pro opakované návštěvníky"
#: inc/admin.php:1354
msgid "Browser Caching"
msgstr "Cache paměť prohlížeče"
#: inc/admin.php:1343
msgid "Reduce the size of files sent from your server"
msgstr "Zmenšit velikost souborů odeslaných ze serveru"
#: inc/admin.php:1342
msgid "Gzip"
msgstr "Gzip"
#: inc/admin.php:1323 inc/admin.php:1330 inc/admin.php:1336
msgid "Combine Js Plus"
msgstr "Kombinovat JS Plus"
#: inc/admin.php:1316
msgid "Combine Js"
msgstr "Kombinovat JS"
#: inc/admin.php:1300 inc/admin.php:1305 inc/admin.php:1311
msgid "You can decrease the size of js files"
msgstr "Můžete zmenšit velikost JS souborů"
#: inc/admin.php:1299 inc/admin.php:1304 inc/admin.php:1310
msgid "Minify Js"
msgstr "Minifikace JS"
#: inc/admin.php:1292
msgid "Reduce HTTP requests through combined css files"
msgstr "Snížit požadavky HTTP prostřednictvím kombinovaných CSS souborů "
#: inc/admin.php:1291
msgid "Combine Css"
msgstr "Kombinovat CSS"
#: inc/admin.php:1280 inc/admin.php:1285
msgid "More powerful minify css"
msgstr "Výkonnější minifikace CSS"
#: inc/admin.php:1279 inc/admin.php:1284
msgid "Minify Css Plus"
msgstr "Minifikace CSS Plus"
#: inc/admin.php:1271
msgid "You can decrease the size of css files"
msgstr "Můžete zmenšit velikost souborů CSS"
#: inc/admin.php:1270
msgid "Minify Css"
msgstr "Minifikace CSS"
#: inc/admin.php:1258 inc/admin.php:1263
msgid "More powerful minify html"
msgstr "Výkonnější minifikace HTML"
#: inc/admin.php:1257 inc/admin.php:1262
msgid "Minify HTML Plus"
msgstr "Minifikace HTML Plus"
#: inc/admin.php:1251
msgid "You can decrease the size of page"
msgstr "Můžete zmenšit velikost stránky"
#: inc/admin.php:1250
msgid "Minify HTML"
msgstr "Minifikace HTML"
#: inc/admin.php:1242
msgid "Clear cache files when a post or page is updated"
msgstr "Vymazat soubory cache paměti při aktualizaci příspěvku nebo stránky"
#: inc/admin.php:1241 templates/updatepost.php:18
msgid "Update Post"
msgstr "Aktualizace příspěvku"
#: inc/admin.php:1235
msgid "Clear cache files when a post or page is published"
msgstr "Vymazat soubory cache paměti při publikování příspěvku nebo stránky"
#: inc/admin.php:1234 templates/newpost.php:18
msgid "New Post"
msgstr "Nový příspěvek"
#: inc/admin.php:1202 inc/admin.php:1228
msgid "Create cache for mobile theme"
msgstr "Vytvořit cache paměť pro mobilní šablonu"
#: inc/admin.php:1201 inc/admin.php:1227
msgid "Mobile Theme"
msgstr "Mobilní šablona"
#: inc/admin.php:1196
msgid "Don't show the cached version for desktop to mobile devices"
msgstr "Nezobrazovat verzi cache paměti na stolních počítačích nebo na mobilních zařízeních"
#: inc/admin.php:1195
msgid "Mobile"
msgstr "Mobilní"
#: inc/admin.php:1191
msgid "Don't show the cached version for logged-in users"
msgstr "Nezobrazovat verzi cache paměti přihlášeným uživatelům"
#: inc/admin.php:1190
msgid "Logged-in Users"
msgstr "Přihlášení uživatelé"
#: inc/admin.php:1158
msgid "Create the cache of all the site automatically"
msgstr "Vytvořit cache paměť všech webů automaticky"
#: inc/admin.php:1157
msgid "Preload"
msgstr "Předběžně načíst"
#: inc/admin.php:1129 inc/admin.php:1135 inc/admin.php:1142 inc/admin.php:1149
msgid "Reduce the number of SQL queries"
msgstr "Snížit počet dotazů SQL"
#: inc/admin.php:1128 inc/admin.php:1134 inc/admin.php:1141 inc/admin.php:1148
msgid "Widget Cache"
msgstr "Cache paměť widgetu"
#: inc/admin.php:1119
msgid "Enable"
msgstr "Povolit"
#: inc/admin.php:1118
msgid "Cache System"
msgstr "Systém cache paměti"
#: wpFastestCache.php:2321
msgid "Once Every 15 Days"
msgstr "Jednou za 15 dní"
#: wpFastestCache.php:2309
msgid "Once Every 7 Days"
msgstr "Jednou za 7 dní"
#: wpFastestCache.php:2303
msgid "Once Every 3 Days"
msgstr "Jednou za 3 dny"
#: wpFastestCache.php:2291
msgid "Once Every 10 Hours"
msgstr "Jednou za 10 hodin"
#: wpFastestCache.php:2285
msgid "Once Every 9 Hours"
msgstr "Jednou za 9 hodin"
#: wpFastestCache.php:2279
msgid "Once Every 8 Hours"
msgstr "Jednou za 8 hodin"
#: wpFastestCache.php:2273
msgid "Once Every 7 Hours"
msgstr "Jednou za 7 hodin"
#: wpFastestCache.php:2261
msgid "Once Every 5 Hours"
msgstr "Jednou za 5 hodin"
#: wpFastestCache.php:2255
msgid "Once Every 4 Hours"
msgstr "Jednou za 4 hodiny"
#: wpFastestCache.php:2249
msgid "Once Every 3 Hours"
msgstr "Jednou za 3 hodiny"
#: wpFastestCache.php:2243
msgid "Once Every 2 Hours"
msgstr "Jednou za 2 hodiny"
#: wpFastestCache.php:2315
msgid "Once Every 10 Days"
msgstr "Jednou za 10 dní"
#. Author of the plugin
#: wpFastestCache.php
msgid "Emre Vona"
msgstr "Emre Vona"
#. Description of the plugin
#: wpFastestCache.php
msgid "The simplest and fastest WP Cache system"
msgstr "Nejjednodušší a nejrychlejší WP Cache systém"
#. Plugin URI of the plugin
#: wpFastestCache.php
msgid "http://wordpress.org/plugins/wp-fastest-cache/"
msgstr "http://cs.wordpress.org/plugins/wp-fastest-cache/"
#. Plugin Name of the plugin
#: wpFastestCache.php
msgid "WP Fastest Cache"
msgstr "WP Fastest Cache"
#: wpFastestCache.php:2333
msgid "Once a Year"
msgstr "Jednou za rok"
#: wpFastestCache.php:2327
msgid "Once a Month"
msgstr "Jednou za měsíc"
#: wpFastestCache.php:2297
msgid "Once a Day"
msgstr "Jednou za den"
#: wpFastestCache.php:2267
msgid "Once Every 6 Hours"
msgstr "Jednou za 6 hodin"
#: wpFastestCache.php:2237
msgid "Once an Hour"
msgstr "Jednou za hodinu"
#: wpFastestCache.php:2231
msgid "Twice an Hour"
msgstr "Dvakrát za hodinu"
#: wpFastestCache.php:2225
msgid "Once Every 15 Minutes"
msgstr "Jednou za 15 minut"
#: wpFastestCache.php:2219
msgid "Once Every 5 Minutes"
msgstr "Jednou za 5 minut"
#: wpFastestCache.php:2213
msgid "Once Every 1 Minute"
msgstr "Jednou za minutu"

Some files were not shown because too many files have changed in this diff Show More