Настоящее Пользовательское Соглашение (Далее Соглашение) регулирует отношения между ООО “Сомна Секра” (далее Somnasecra или Администрация) с одной стороны и пользователем сайта с другой. Сайт Somnasecra не является средством массовой информации.
Используя сайт, Вы соглашаетесь с условиями данного соглашения. Если Вы не согласны с условиями данного соглашения, не используйте сайт Somnasecra!
Права и обязанности сторон
Пользователь имеет право: – осуществлять поиск информации на сайте – получать информацию на сайте – копировать информацию на другие сайты с указанием источника – копировать информацию на другие сайты с разрешения Администрации сайта – копировать информацию на другие сайты с разрешения правообладателя – использовать информацию сайта в личных некоммерческих целях
Администрация имеет право: – по своему усмотрению и необходимости создавать, изменять, отменять правила – ограничивать доступ к любой информации на сайте – создавать, изменять, удалять информацию
Пользователь обязуется: – обеспечить достоверность предоставляемой информации – не копировать информацию с других источников – при копировании информации с других источников, включать в её состав информацию об авторе – не распространять информацию, которая направлена на пропаганду войны, разжигание национальной, расовой или религиозной ненависти и вражды, а также иной информации, за распространение которой предусмотрена уголовная или административная ответственность – не нарушать работоспособность сайта – не создавать несколько учётных записей на Сайте, если фактически они принадлежат одному и тому же лицу – не совершать действия, направленные на введение других Пользователей в заблуждение – не передавать в пользование свою учетную запись и/или логин и пароль своей учетной записи третьим лицам – не регистрировать учетную запись от имени или вместо другого лица за исключением случаев, предусмотренных законодательством РФ – не размещать материалы рекламного, эротического, порнографического или оскорбительного характера, а также иную информацию, размещение которой запрещено или противоречит нормам действующего законодательства РФ – не использовать скрипты (программы) для автоматизированного сбора информации и/или взаимодействия с Сайтом и его Сервисами
Администрация обязуется: – поддерживать работоспособность сайта за исключением случаев, когда это невозможно по независящим от Администрации причинам.
Ответственность сторон
– пользователь лично несет полную ответственность за распространяемую им информацию – администрация не несет никакой ответственности за достоверность информации, скопированной из других источников – администрация не несёт ответственность за несовпадение ожидаемых Пользователем и реально полученных услуг – администрация не несет никакой ответственности за услуги, предоставляемые третьими лицами – в случае возникновения форс-мажорной ситуации (боевые действия, чрезвычайное положение, стихийное бедствие и т. д.) Администрация не гарантирует сохранность информации, размещённой Пользователем, а также бесперебойную работу информационного ресурса
Условия действия Соглашения
Данное Соглашение вступает в силу при любом использовании данного сайта. Соглашение перестает действовать при появлении его новой версии. Администрация оставляет за собой право в одностороннем порядке изменять данное соглашение по своему усмотрению. Администрация не оповещает пользователей об изменении в Соглашении.
прямо перед закрывающим
* (например, через Elementor -> Настройки сайта -> Пользовательский код -> "Перед
").
*
* Ничего дополнительно настраивать не нужно — скрипт сам находит домен CDN и origin.
*/
(function () {
"use strict";
// Домен CDN, который нужно подменять при ошибке
var CDN_HOST = "deekricrodoqueju.begetcdn.cloud";
// Основной домен сайта (origin), куда переключаемся при сбое
var ORIGIN_HOST = "somnasecra.ru";
// Чтобы не зациклиться, если и origin вдруг не ответит — помечаем картинку как "уже пробовали"
var FALLBACK_ATTR = "data-cdn-fallback-tried";
// URL, куда отправляется "маячок" при срабатывании фоллбека.
// Это стандартный WordPress AJAX-обработчик — работает сразу после установки PHP-сниппета
// "CDN Fallback Monitor" через WPCode, без дополнительной настройки.
var LOG_ENDPOINT = "https://somnasecra.ru/wp-admin/admin-ajax.php?action=cdn_fallback_log";
function logFallback(originalUrl, newUrl) {
// Видно сразу в DevTools -> Console у любого, кто откроет консоль в момент сбоя
console.warn("[CDN Fallback] Переключение с CDN на origin:", originalUrl, "->", newUrl);
if (!LOG_ENDPOINT) return;
var payload = JSON.stringify({
original_url: originalUrl,
fallback_url: newUrl,
page_url: window.location.href,
timestamp: new Date().toISOString(),
user_agent: navigator.userAgent,
});
// sendBeacon — специально для таких "маячков": не блокирует страницу,
// отправляется даже если пользователь тут же закроет вкладку
try {
if (navigator.sendBeacon) {
var blob = new Blob([payload], { type: "application/json" });
navigator.sendBeacon(LOG_ENDPOINT, blob);
} else {
// Фоллбек для очень старых браузеров без sendBeacon
fetch(LOG_ENDPOINT, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: payload,
keepalive: true,
}).catch(function () {});
}
} catch (e) {
// Если отправка лога сломалась — это не должно ломать сам фоллбек картинки
}
}
function toOriginUrl(cdnUrl) {
try {
var url = new URL(cdnUrl, window.location.href);
if (url.hostname === CDN_HOST) {
url.hostname = ORIGIN_HOST;
url.protocol = "https:";
return url.toString();
}
} catch (e) {
// Некорректный URL — просто ничего не делаем
}
return null;
}
function handleImageError(img) {
// Если уже пробовали фоллбек для этой картинки — не пытаемся снова (защита от бесконечного цикла)
if (img.hasAttribute(FALLBACK_ATTR)) {
return;
}
var originUrl = toOriginUrl(img.src);
if (originUrl) {
logFallback(img.src, originUrl);
img.setAttribute(FALLBACK_ATTR, "1");
img.src = originUrl;
}
// Дополнительно обрабатываем srcset, если он есть (адаптивные картинки)
if (img.srcset) {
var newSrcset = img.srcset.split(",").map(function (part) {
var trimmed = part.trim();
var spaceIndex = trimmed.indexOf(" ");
var urlPart = spaceIndex === -1 ? trimmed : trimmed.substring(0, spaceIndex);
var sizePart = spaceIndex === -1 ? "" : trimmed.substring(spaceIndex);
var replaced = toOriginUrl(urlPart);
return (replaced || urlPart) + sizePart;
});
img.srcset = newSrcset.join(", ");
}
}
function attachErrorHandler(img) {
// Проверяем: относится ли картинка к CDN-домену
if (img.src && img.src.indexOf(CDN_HOST) !== -1) {
img.addEventListener("error", function () {
handleImageError(img);
});
}
}
function scanAllImages() {
var images = document.querySelectorAll("img");
images.forEach(attachErrorHandler);
}
// Обрабатываем все картинки, которые уже есть на странице при загрузке
document.addEventListener("DOMContentLoaded", scanAllImages);
// Elementor и многие плагины подгружают картинки динамически (карусели, AJAX, попапы)
// Поэтому дополнительно следим за новыми картинками через MutationObserver
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
mutation.addedNodes.forEach(function (node) {
if (node.nodeType !== 1) return; // интересуют только элементы, не текстовые узлы
if (node.tagName === "IMG") {
attachErrorHandler(node);
} else if (node.querySelectorAll) {
var nestedImages = node.querySelectorAll("img");
nestedImages.forEach(attachErrorHandler);
}
});
});
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
});
// На случай, если DOMContentLoaded уже прошёл к моменту подключения скрипта
if (document.readyState === "interactive" || document.readyState === "complete") {
scanAllImages();
}
})();