22layout: default
33---
44< article class ="post " itemscope itemtype ="http://schema.org/BlogPosting ">
5- < header >
5+ < header class =" post-header " >
66 < h1 itemprop ="name headline "> {{ page.title }}</ h1 >
7- < p class ="meta ">
8- < time datetime ="{{ page.date | date_to_xmlschema }} " itemprop ="datePublished "> {{ page.date | date: "%b %-d, %Y" }}</ time >
9- </ p >
7+ < div class ="post-meta ">
8+ < time datetime ="{{ page.date | date_to_xmlschema }} " itemprop ="datePublished ">
9+ {{ page.date | date: "%d %B %Y" }}
10+ </ time >
11+ {% if page.author %}
12+ < span class ="post-author ">
13+ • < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
14+ < span itemprop ="name "> {{ page.author }}</ span >
15+ </ span >
16+ </ span >
17+ {% endif %}
18+ {% assign words = content | number_of_words %}
19+ < span class ="reading-time ">
20+ • {% if words < 360 %}1 мин{% else %}{{ words | divided_by: 180 }} мин{% endif %} чтения
21+ </ span >
22+ </ div >
1023 </ header >
1124
1225 {% if page.image %}
13- < img src ="{{ page.image }} " alt ="{{ page.title }} " class ="post-image-post ">
26+ < div class ="post-featured-image ">
27+ < img src ="{{ page.image }} " alt ="{{ page.title }} " class ="post-image-post " itemprop ="image ">
28+ </ div >
1429 {% endif %}
1530
1631 < div class ="post-content " itemprop ="articleBody ">
1732 {{ content }}
1833 </ div >
1934
2035 {% if page.tags.size > 0 %}
21- < div class ="tags ">
22- < span > Теги:</ span >
36+ < div class ="post- tags ">
37+ < span class =" tags-label " > Теги:</ span >
2338 {% for tag in page.tags %}
24- < a href ="/tags#{{ tag | slugify }} "> {{ tag }}</ a >
39+ < a href ="/tags#{{ tag | slugify }} " class ="tag-link " rel ="tag "> {{ tag }}</ a >
40+ {% endfor %}
41+ </ div >
42+ {% endif %}
43+
44+ < div class ="post-sharing ">
45+ < h3 > Поделиться статьей:</ h3 >
46+ < div class ="sharing-buttons ">
47+ < a href ="https://t.me/share/url?url={{ site.url }}{{ page.url | uri_escape }}&text={{ page.title | uri_escape }} "
48+ class ="share-btn telegram " target ="_blank " rel ="noopener noreferrer " aria-label ="Поделиться в Telegram ">
49+ < span > 📱 Telegram</ span >
50+ </ a >
51+
52+ < a href ="https://twitter.com/intent/tweet?url={{ site.url }}{{ page.url | uri_escape }}&text={{ page.title | uri_escape }}&via=osengine_ru "
53+ class ="share-btn twitter " target ="_blank " rel ="noopener noreferrer " aria-label ="Поделиться в Twitter ">
54+ < span > 🐦 Twitter</ span >
55+ </ a >
56+
57+ < a href ="https://www.facebook.com/sharer/sharer.php?u={{ site.url }}{{ page.url | uri_escape }} "
58+ class ="share-btn facebook " target ="_blank " rel ="noopener noreferrer " aria-label ="Поделиться в Facebook ">
59+ < span > 📘 Facebook</ span >
60+ </ a >
61+
62+ < a href ="https://vk.com/share.php?url={{ site.url }}{{ page.url | uri_escape }}&title={{ page.title | uri_escape }} "
63+ class ="share-btn vkontakte " target ="_blank " rel ="noopener noreferrer " aria-label ="Поделиться ВКонтакте ">
64+ < span > 🔵 ВКонтакте</ span >
65+ </ a >
66+
67+ < a href ="https://www.linkedin.com/sharing/share-offsite/?url={{ site.url }}{{ page.url | uri_escape }} "
68+ class ="share-btn linkedin " target ="_blank " rel ="noopener noreferrer " aria-label ="Поделиться в LinkedIn ">
69+ < span > 💼 LinkedIn</ span >
70+ </ a >
71+
72+ < button class ="share-btn copy-link " onclick ="copyToClipboard('{{ site.url }}{{ page.url }}') " aria-label ="Скопировать ссылку ">
73+ < span > 🔗 Копировать ссылку</ span >
74+ </ button >
75+ </ div >
76+ </ div >
77+
78+ <!-- Related Posts -->
79+ {% assign related_posts = site.related_posts | limit: 3 %}
80+ {% if related_posts.size > 0 %}
81+ < div class ="related-posts ">
82+ < h3 > Похожие статьи</ h3 >
83+ < div class ="related-posts-grid ">
84+ {% for post in related_posts %}
85+ < article class ="related-post-card ">
86+ {% if post.image %}
87+ < img src ="{{ post.image }} " alt ="{{ post.title }} " class ="related-post-image ">
88+ {% else %}
89+ < div class ="related-post-placeholder "> 📰</ div >
90+ {% endif %}
91+ < div class ="related-post-content ">
92+ < h4 > < a href ="{{ post.url }} "> {{ post.title }}</ a > </ h4 >
93+ < time datetime ="{{ post.date | date_to_xmlschema }} "> {{ post.date | date: "%d %B %Y" }}</ time >
94+ </ div >
95+ </ article >
2596 {% endfor %}
2697 </ div >
98+ </ div >
2799 {% endif %}
28- </ article >
100+
101+ <!-- Navigation to Previous/Next Posts -->
102+ < nav class ="post-navigation ">
103+ {% if page.previous %}
104+ < a href ="{{ page.previous.url }} " class ="nav-previous " rel ="prev ">
105+ ← {{ page.previous.title | truncate: 30 }}
106+ </ a >
107+ {% endif %}
108+ {% if page.next %}
109+ < a href ="{{ page.next.url }} " class ="nav-next " rel ="next ">
110+ {{ page.next.title | truncate: 30 }} →
111+ </ a >
112+ {% endif %}
113+ </ nav >
114+
115+ <!-- Comments Section Placeholder -->
116+ < div class ="post-comments ">
117+ < h3 > Обсуждение</ h3 >
118+ < p > Присоединяйтесь к обсуждению в нашем < a href ="https://t.me/osengine " target ="_blank "> Telegram-чате</ a > !</ p >
119+
120+ <!-- Здесь можно добавить систему комментариев (Disqus, Gitalk, etc.) -->
121+ < div id ="comments ">
122+ <!-- Comments system integration -->
123+ </ div >
124+ </ div >
125+ </ article >
126+
127+ < script >
128+ // Copy to clipboard function
129+ function copyToClipboard ( text ) {
130+ if ( navigator . clipboard && window . isSecureContext ) {
131+ navigator . clipboard . writeText ( text ) . then ( ( ) => {
132+ showCopyMessage ( 'Ссылка скопирована!' ) ;
133+ } ) ;
134+ } else {
135+ // Fallback for older browsers
136+ const textArea = document . createElement ( 'textarea' ) ;
137+ textArea . value = text ;
138+ textArea . style . position = 'fixed' ;
139+ textArea . style . left = '-999999px' ;
140+ textArea . style . top = '-999999px' ;
141+ document . body . appendChild ( textArea ) ;
142+ textArea . focus ( ) ;
143+ textArea . select ( ) ;
144+
145+ try {
146+ document . execCommand ( 'copy' ) ;
147+ showCopyMessage ( 'Ссылка скопирована!' ) ;
148+ } catch ( err ) {
149+ showCopyMessage ( 'Ошибка копирования' ) ;
150+ }
151+
152+ textArea . remove ( ) ;
153+ }
154+ }
155+
156+ function showCopyMessage ( message ) {
157+ // Create and show a temporary message
158+ const msgEl = document . createElement ( 'div' ) ;
159+ msgEl . textContent = message ;
160+ msgEl . style . cssText = `
161+ position: fixed;
162+ top: 20px;
163+ right: 20px;
164+ background: var(--primary-color);
165+ color: white;
166+ padding: 12px 20px;
167+ border-radius: 8px;
168+ box-shadow: var(--shadow-lg);
169+ z-index: 10000;
170+ font-weight: 500;
171+ transition: all 0.3s ease;
172+ ` ;
173+
174+ document . body . appendChild ( msgEl ) ;
175+
176+ setTimeout ( ( ) => {
177+ msgEl . style . opacity = '0' ;
178+ msgEl . style . transform = 'translateY(-20px)' ;
179+ setTimeout ( ( ) => msgEl . remove ( ) , 300 ) ;
180+ } , 2000 ) ;
181+ }
182+ </ script >
0 commit comments