From b5ad30e5a63428b86edfa1aea361428a0a17c03b Mon Sep 17 00:00:00 2001
From: erjemin
Date: Wed, 28 Jan 2026 22:45:29 +0300
Subject: [PATCH] =?UTF-8?q?mod:=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=20=D0=B8?=
=?UTF-8?q?=20=D0=BC=D0=B5=D0=BD=D1=8E...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blog/templates/blog/page_detail.html | 7 +-
.../blog/templates/blog/post_detail.html | 8 +-
etpgrf_site/etpgrf_site/settings.py | 4 +-
.../typograph/templates/typograph/base.html | 19 +++-
.../typograph/templates/typograph/index.html | 6 ++
public/static/css/etpgrf.css | 96 ++++++++++++++++++-
public/static/js/base.js | 20 +++-
7 files changed, 145 insertions(+), 15 deletions(-)
diff --git a/etpgrf_site/blog/templates/blog/page_detail.html b/etpgrf_site/blog/templates/blog/page_detail.html
index d4dbca0..94dc7ee 100644
--- a/etpgrf_site/blog/templates/blog/page_detail.html
+++ b/etpgrf_site/blog/templates/blog/page_detail.html
@@ -3,6 +3,7 @@
{% block title %}{{ page.seo_title|default:page.title }} — ETPGRF{% endblock %}
{% block description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
+{% block keywords %}{{ page.seo_keywords|default:'типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев' }} seo_keywords {% endblock %}
{% block og_title %}{{ page.seo_title|default:page.title }}{% endblock %}
{% block og_description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
{% block og_image %}{% if page.image %}{{ request.scheme }}://{{ request.get_host }}{{ page.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %}
@@ -22,15 +23,15 @@
{% if post.image %}
-
+
{% else %}
-
+
{% endif %}
{# Правая колонка: Контент #}
-
+
{{ page.title|safe }}
diff --git a/etpgrf_site/blog/templates/blog/post_detail.html b/etpgrf_site/blog/templates/blog/post_detail.html
index a8e6011..b0fa76a 100644
--- a/etpgrf_site/blog/templates/blog/post_detail.html
+++ b/etpgrf_site/blog/templates/blog/post_detail.html
@@ -23,9 +23,9 @@
{% if post.image %}
-
+
{% else %}
-
+
{% endif %}
@@ -35,7 +35,7 @@
{# Правая колонка: Контент #}
-
+
{{ post.title }}
@@ -54,5 +54,5 @@
-
+
{% endblock %}
diff --git a/etpgrf_site/etpgrf_site/settings.py b/etpgrf_site/etpgrf_site/settings.py
index 98b4edb..f66afdb 100644
--- a/etpgrf_site/etpgrf_site/settings.py
+++ b/etpgrf_site/etpgrf_site/settings.py
@@ -34,8 +34,8 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
- 'typograph',
- 'blog', # Наше новое приложение
+ 'typograph', # Основное приложение типографа
+ 'blog', # Приложение для блога и страниц
]
MIDDLEWARE = [
diff --git a/etpgrf_site/typograph/templates/typograph/base.html b/etpgrf_site/typograph/templates/typograph/base.html
index 76d7425..a275d3b 100644
--- a/etpgrf_site/typograph/templates/typograph/base.html
+++ b/etpgrf_site/typograph/templates/typograph/base.html
@@ -7,7 +7,7 @@
{# --- SEO & Meta Tags --- #}
{% block title %}ETPGRF — единая типографика для веба{% endblock %}
-
+
{# --- Open Graph (Facebook, VK, LinkedIn, Telegram) --- #}
@@ -60,6 +60,23 @@
+
+ {# Кнопка-бургер для мобильных #}
+
+
+ {# Меню #}
+
diff --git a/etpgrf_site/typograph/templates/typograph/index.html b/etpgrf_site/typograph/templates/typograph/index.html
index 9eeb1ea..bdfd197 100644
--- a/etpgrf_site/typograph/templates/typograph/index.html
+++ b/etpgrf_site/typograph/templates/typograph/index.html
@@ -1,6 +1,12 @@
{% extends 'typograph/base.html' %}
{% load static %}
+{% block title %}ETPGRF — единая типографика для веба{% endblock %}
+
+{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %}
+
+{% block keywords %}типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев{% endblock %}
+
{% block content %}
diff --git a/public/static/css/etpgrf.css b/public/static/css/etpgrf.css
index e510503..2d95d02 100644
--- a/public/static/css/etpgrf.css
+++ b/public/static/css/etpgrf.css
@@ -26,6 +26,9 @@
--bs-link-color: #90caf9;
--bs-link-hover-color: #bbdefb;
+ --bs-linkcolor: #14abda;
+ --bs-linkclolor-hover: #90caf9;
+
--bs-border-color: #37474f;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
@@ -38,11 +41,12 @@
}
/* Небольшие стили для красоты */
-html, body {
+html {
height: 100%;
}
body {
+ min-height: 100%; /* Используем min-height вместо height */
background-color: var(--bs-body-bg);
display: flex;
flex-direction: column;
@@ -76,6 +80,7 @@ body {
}
#main-navbar > #logo > .navbar-brand {
+ padding: 0; /* Убираем отступы у бренда */
display: block; /* Блок, чтобы работали размеры */
background: no-repeat left;
background-size: contain;
@@ -96,6 +101,50 @@ body {
opacity: 0;
}
+/* --- Стили для ссылок в меню --- */
+.navbar {
+ /* position: fixed; Убрал fixed, так как у нас sticky */
+ /* top: 0; */
+ /* width: 100%; */
+ /* background: var(--bs-navbar-bg); */
+ /* display: flex; */
+ /* justify-content: center; */
+ /* transition: all 0.8s; */
+}
+.nav-item {
+ color: var(--bs-body-bg);
+ padding: 10px 15px;
+ text-decoration: none;
+ position: relative;
+}
+
+/* Фикс для мобильной версии: ширина по контенту и прижатие вправо */
+@media (max-width: 991.98px) {
+ .nav-item {
+ width: fit-content;
+ margin-left: auto;
+ }
+}
+
+.nav-item:hover {
+ background-color: var(--bs-navbar-bg);
+ transition: background-color 0.8s;
+}
+.nav-item::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 3px;
+ background: var(--bs-linkcolor);
+ bottom: 0;
+ left: 0;
+ transform: scaleX(0);
+ transition: transform 0.3s;
+}
+.nav-item:hover::after {
+ transform: scaleX(1);
+}
+
/* Контент растягивается, чтобы прижать футер */
#content-container {
flex: 1 0 auto;
@@ -154,10 +203,8 @@ body {
color: var(--bs-body-color);
border: 1px solid var(--bs-border-color);
border-radius: 0.375rem;
- padding: 1rem;
min-height: 300px;
- padding-left: 1.5rem;
- padding-right: 1.5rem;
+ padding: 1rem 1.5rem;
white-space: pre-wrap;
font-family: inherit;
}
@@ -249,4 +296,45 @@ body {
#cookie-accept:hover {
background: rgba(var(--bs-primary-rgb), 0.1);
+}
+
+/* --- Стили для контента блога (Typography) --- */
+.post-page-content h1, .post-page-content h2, .post-page-content h3,
+.post-page-content h4, .post-page-content h5, .post-page-content h6 {
+ color: var(--bs-body-color);
+ opacity: 90%;
+ font-weight: 300;
+ padding-top: 1rem;
+ padding-bottom: 0.5rem;
+}
+
+
+.post-page-content p, .post-page-content li {
+ margin-bottom: 0.5rem;
+ line-height: 1.6;
+ font-size: 1.1rem;
+}
+
+.post-page-content ul, .post-page-conten ol {
+ margin-bottom: 1.5rem;
+}
+
+.post-page-content blockquote {
+ border-left: 4px solid var(--bs-primary);
+ padding-left: 1rem;
+ margin: 1.5rem 0;
+ font-style: italic;
+ /*color: var(--bs-secondary-color);*/
+}
+
+.post-page-content a {
+ color: var(--bs-linkcolor);
+ text-decoration: none;
+ border-bottom: 1px dotted var(--bs-linkcolor);
+}
+
+.post-page-content a:hover {
+ color: var(--bs-linkclolor-hover);
+ border-bottom: 1px solid var(--bs-linkclolor-hover);
+
}
\ No newline at end of file
diff --git a/public/static/js/base.js b/public/static/js/base.js
index fbbc99e..a8b9cb7 100644
--- a/public/static/js/base.js
+++ b/public/static/js/base.js
@@ -18,6 +18,7 @@
function updateLogo() {
const navbar = document.getElementById('logo');
if (!navbar) return;
+
const scrollY = window.scrollY;
// Гистерезис: включаем после 60px, выключаем до 10px
@@ -31,6 +32,23 @@
// Инициализация логотипа при загрузке и скролле
window.addEventListener('scroll', updateLogo, { passive: true });
+
+ // --- МОБИЛЬНОЕ МЕНЮ (Скрытие логотипа при открытии) ---
+ document.addEventListener('DOMContentLoaded', function() {
+ const navbarNav = document.getElementById('navbarNav');
+ const navbarBrand = document.querySelector('.navbar-brand');
+
+ if (navbarNav && navbarBrand) {
+ navbarNav.addEventListener('show.bs.collapse', function () {
+ navbarBrand.style.opacity = '0';
+ navbarBrand.style.transition = 'opacity 0.3s ease';
+ });
+
+ navbarNav.addEventListener('hide.bs.collapse', function () {
+ navbarBrand.style.opacity = '1';
+ });
+ }
+ });
// --- КУКИ И СЧЕТЧИКИ ---
const COOKIE_KEY = 'cookie_consent';
@@ -78,7 +96,7 @@
// Делаем gtag глобальной, чтобы вызывать из sendGoal
window.gtag = gtag;
gtag('js', new Date());
- gtag('config', GOOGLE_ID);
+ gtag('config', '\'' + GOOGLE_ID + '\'');
} catch (e) {
console.error("Ошибка загрузки счетчиков:", e);