DEV: Незначительные измененеия

This commit is contained in:
Evg 2022-03-30 08:48:04 +03:00
parent 3f8de724e9
commit 477efebed9
16 changed files with 101 additions and 140 deletions

View File

@ -2,10 +2,11 @@
namespace App\Controllers;
use Hleb\Scheme\App\Controllers\MainController;
use Hleb\Constructor\Handlers\Request;
use Data, Content, Translate;
use Data, Content;
class ArticleController extends \MainController
class ArticleController extends MainController
{
public function index($slug)
{
@ -14,26 +15,25 @@ class ArticleController extends \MainController
}
Data::lang($lang);
if (!$file = 'files/' . $lang . '/' . $slug . '.md') {
return false;
}
$contents = Content::text($file);
preg_match_all("/<h1>(.*?)<\/h1>/", $contents, $matches);
$title = $matches[1][0];
$telo = explode("\n", $contents);
$desc = strip_tags($telo[1]);
$cnt = Content::headings($contents, $lang, $slug);
$head = $cnt['head'];
if ($slug == 'welcome') {
$head = false;
$head = false;
}
Request::getResources()->addBottomStyles('/assets/js/prism/prism.css');
Request::getResources()->addBottomScript('/assets/js/prism/prism.js');
@ -49,9 +49,5 @@ class ArticleController extends \MainController
],
],
);
}
}

View File

@ -2,13 +2,14 @@
namespace App\Controllers;
use Hleb\Scheme\App\Controllers\MainController;
use Translate;
class HomeController extends \MainController
class HomeController extends MainController
{
public function index()
{
return view(
return view(
'/index',
[
'title' => Translate::get('index.title'),
@ -18,6 +19,4 @@ class HomeController extends \MainController
],
);
}
}

View File

@ -1,15 +1,13 @@
<?php
use App\Models\ContentModel;
class Content
{
public static function text($path)
{
if (!$path) {
if (!$path) {
return false;
}
$content = file_get_contents(HLEB_DIR . $path);
return self::parser($content, 'text');
@ -24,15 +22,17 @@ class Content
if ($type == 'text') {
return $Parsedown->text($content);
}
return $Parsedown->line($content);
}
}
// Parsedown
public static function headings($html_string, $lang, $slug)
public static function headings($html_string, $lang, $slug)
{
// Let's make at least 1 h1, h2... heading, mandatory
if (!preg_match_all('#<h([1-5])>(.*?)</h[1-5]>#', $html_string, $resultats)) {return;}
if (!preg_match_all('#<h([1-5])>(.*?)</h[1-5]>#', $html_string, $resultats)) {
return;
}
$base = '/' . $lang . '/';
$from = $to = array();
@ -44,18 +44,17 @@ class Content
$header = preg_replace('#\s+#', ' ', trim(rtrim($header, ':!.?;')));
$anchor = str_replace(' ', '-', $header);
$header = "<a href=\"{$base}/{$slug}#{$anchor}\">{$header}</a>";
if ($depth > 0) {
if ($resultats[1][$i] > $depth) {
while ($resultats[1][$i] > $depth) {
$head .= '<ul>';
$depth ++;
$depth++;
}
}
elseif ($resultats[1][$i] < $depth) {
} elseif ($resultats[1][$i] < $depth) {
while ($resultats[1][$i] < $depth) {
$head .= '</ul>';
$depth --;
$depth--;
}
}
}
@ -64,17 +63,17 @@ class Content
$start = $depth;
}
$head .= '<li>' . $header . '</li>';
$from[$i] = $resultats[0][$i];
$to[$i] = '<a class="anchor" name="' . $anchor . '">' . $resultats[0][$i] . '</a>';
}
// Closing all open lists
for ($i = 0; $i <= ($depth - $start); $i ++) {
for ($i = 0; $i <= ($depth - $start); $i++) {
$head .= "</ul>";
}
// Adding Anchors to Headings
$text = str_replace($from, $to, $html_string);
return $data = ['head' => $head, 'text' => $text];
}
}

View File

@ -5,14 +5,15 @@ class Data
{
const LANG = ['ru', 'en'];
const DEFAULT_LANG = ['ru', 'en'];
const NAME = 'LibArea';
const LOGO_BIG = '<img class="logo" alt="LibArea" src="/assets/images/LibArea_limpid.png">';
const LOGO_SMALL = '<a title="LibArea" href="/">LibArea</a>';
public static function lang($lang = 'ru'){
public static function lang($lang = 'ru')
{
$lang = $lang ?? self::DEFAULT_LANG;
Translate::setLang($lang);
}

5
files/en/metrica.md Normal file
View File

@ -0,0 +1,5 @@
# How to add counter code?
*Documentation under development ...*
—> [**Go to home page**](/ru/)

View File

@ -2,4 +2,6 @@
We welcome minimalism and try to follow this concept on the website as well.
*Documentation under development ...*
*Documentation under development ...*
—> [**Go to home page**](/ru/)

View File

@ -4,11 +4,12 @@ We welcome minimalism and try to follow this concept on the website as well.
Easy and fast. Server side: php + mysql
![LibArea](/assets/images/libarea-home.jpg)
Currently, Agouti fully supports localization in English, Romanian and Russian logicalization. Work on other languages continues.
A demo is available on the Agouti website (in Russian): https://libarea.ru
GitHub: https://github.com/LibArea
*Documentation under development ...*

View File

@ -1,43 +0,0 @@
# Философия сайта
Мы приветствуем минимализм и стараемся следовать этой концепции и на сайте.
Средний размер файла и «вес» веб-сайтов стали немного смешными. В апреле 2016 года [было отмечено](https://mobiforge.com/research-analysis/the-web-is-doom), что средняя страница теперь больше, чем в игре DOOM.
Это не дело!
## Минимальный javascript - не переворачивайте веб-пирамиду
Существует концепция «пирамиды», которая использовалась много лет, когда люди говорят о строительстве для Интернета. Обычно он показывает прочную основу HTML, слой CSS, а вершиной пирамиды является javascript.
![Пирамида html, css и js](/uploads/content/html-css-js.jpeg)
Однако современная веб-разработка фактически перевернула эту пирамиду с ног на голову. Для клиентского javascript стало стандартом доставлять и даже генерировать HTML и CSS. Многие базовые текстовые сайты (например, блоги) больше ничего не отображают без javascript.
Мы считаю, что полагаться на javascript на этом уровне - принципиально неправильный подход к сети, поэтому этот сайт построен «традиционным» способом. Javascript используется как можно меньше и в идеале только тогда, когда это единственный вариант для чего-то. И из-за этого...
### Полностью функциональный для просмотра без javascript
Данный сайт всегда будет работоспособен для просмотра без включенного javascript. Кто-то с отключенным javascript должен иметь возможность просматривать все списки на сайте, читать все типы сообщений и так далее.
Взаимодействие без javascript не будет приоритетом. Некоторые функции могут в конечном итоге не работать естественным образом из-за того, как они реализованы, но мы не будем беспокоиться о том, чтобы сделать такие вещи, как голосование, функциональными, когда javascript отключен.
### Отсутствие голосов против
На сайте нет отрицательных голосов ни за темы, ни за комментарии. Причина этого в том, что я считаю, что мы можем реализовать различные механизмы, которые заменят «правильное» использование голосов против, не допуская при этом всех злоупотреблений ими.
Идеальное использование отрицательного голоса - это общий способ выразить «это не способствует», но на практике они чаще используются как **«я не согласен» или «мне это не нравится»**.
За качественные публикации часто голосуют против, потому что другие пользователи не согласны с этим мнением, а в сообществах, основанных на вкусе (например, связанных с музыкой), целые категории допустимых публикаций могут оказаться нежизнеспособными, потому что за них просто проголосуют против пользователей с другими вкусами.
### Какие технологии использует сайт?
С технической стороны сайт стремится использовать современные версии простых, надежных, «скучных» технологий. Это особенно важно для проекта с открытым исходным кодом, рассчитывающего на участие извне, поскольку это означает, что людям гораздо легче участвовать.
Основными технологиями являются php (с использованием веб-фреймворка HLEB), css, html и разметка Markdown.
> HLEB — это PHP-фреймворк с очень маленьким размером, созданный для разработчиков, которым нужен простой и элегантный инструментарий для создания полнофункциональных веб-приложений.
[phphleb.ru](https://phphleb.ru/)
Несколько других систем используются для конкретных нужд.
*Документация в стадии разработки...*

View File

@ -2,7 +2,7 @@
Сайт LibArea использует технологию *Content Security Policy*. Чтобы добавить счетчик выполните следующие действия...
В дириктории: `/views/default/` вашего шаблона создайте файл: `metrica.php`, а в диритории: `/assets/js/` файл `metrica.js`.
В дириктории: `/views/default/` вашего шаблона создайте файл: `metrica.php`.
В подвал (`footer.php` шаблона) вашего сайте подключите файл `metrica.php` следующим образом:
@ -10,34 +10,26 @@
<?= Tpl::import('/metrica'); ?>
```
В файле `metriсa.php` необходимо разместить код:
В файле `metriсa.php` необходимо разместить код, в данном случае код Яндекс.Счетчика:
```php
<script src="/assets/js/metrica.js"></script>
<noscript><div>
<noscript>
<script nonce="<?= $_SERVER['nonce']; ?>">
(function(m,e,t,r,i,k,a){m[i] и т.д.
</script>
<noscript>
<img src="https://mc.yandex.ru/watch/XXXXXX" class="yandex" /></div>
</noscript>
```
Заменив XXXXXX на номер своего счетчика.
Обратите внимание, что мы добавляем к `script` конструкцию:
А в файл `metrica.js` добавить:
```javascript
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,
k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(XXXXXXXX, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
```php
nonce="<?= $_SERVER['nonce']; ?>"
```
Где за XXXXXXXX номер вашего счетчика в системе Яндекс.Метрика.
Проверьте корректность вашего подключения.
См. более подробно: [ЯндексСправка, Установка счетчика на сайт с CSP](https://yandex.ru/support/metrica/code/install-counter-csp.html)

View File

@ -1,4 +1,5 @@
# Философия сайта
Мы приветствуем минимализм и стараемся следовать этой концепции и на сайте.
Средний размер файла и «вес» веб-сайтов стали немного смешными. В апреле 2016 года [было отмечено](https://mobiforge.com/research-analysis/the-web-is-doom), что средняя страница теперь больше, чем в игре DOOM.

View File

@ -9,8 +9,10 @@ http://libarea.ru
В настоящее время LibArea полностью поддерживает локализацию на английском языке, румынскую и русскую логизацию. Работа над другими языками продолжается.
[Философия сайта](./philosophy)
* [Философия сайта](./philosophy)
[Как добавить код счетчика Яндекс.Метрики?](./yandex-metrica)
* [Как добавить код счетчика Яндекс.Метрики?](./metrica)
На GitHub: https://github.com/LibArea
*Документация в стадии разработки...*

View File

@ -2,15 +2,15 @@
<div id="contentWrapper" class="wrap">
<main>
<?= $data['contents']; ?>
</main>
<?php if($data['headings']) { ?>
<?php if($data['headings']) { ?>
<?= $data['contents']; ?>
</main>
<?php if ($data['headings']) { ?>
<?php if ($data['headings']) { ?>
<aside>
<?= $data['headings']; ?>
<?= $data['headings']; ?>
</aside>
<?php } ?>
<?php } ?>
</div>
<?php } ?>
<?php } ?>
</div>
<?= includeTemplate('footer'); ?>
<?= includeTemplate('footer'); ?>

View File

@ -1,4 +1,5 @@
</body>
<?= getRequestResources()->getBottomStyles(); ?>
<?= getRequestResources()->getBottomScripts(); ?>
</html>

View File

@ -1,29 +1,34 @@
<?php
Request::getHead()->addStyles('/assets/css/style.css?1');
Request::getResources()->addBottomScript('/assets/js/app.js?1');
<?php
use Hleb\Constructor\Handlers\Request;
Request::getHead()->addStyles('/assets/css/style.css?1');
Request::getResources()->addBottomScript('/assets/js/app.js?1');
$bg = $type == 'main' ? 'bg' : 'no';
$logo = $type == 'main' ? '<div class="p40"></div>' : Data::LOGO_SMALL;
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width" />
<meta name="description" content="<?= $desc; ?>" />
<meta name="theme-color" content="#ff786c">
<?php getRequestHead()->output(); ?>
<link rel="icon" href= "/favicon.ico" type="image/x-icon">
<title><?= $title; ?> | <?= Data::NAME; ?></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width" />
<meta name="description" content="<?= $desc; ?>" />
<meta name="theme-color" content="#ff786c">
<?php getRequestHead()->output(); ?>
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<title><?= $title; ?> | <?= Data::NAME; ?></title>
</head>
<body class="<?= $bg; ?><?php if (Request::getCookie('dayNight') == 'dark') { ?> dark<?php } ?>">
<header>
<div class="wrap">
<nav class="navbar">
<?= $logo; ?>
<div id="toggledark">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M 11 0 L 11 3 L 13 3 L 13 0 L 11 0 z M 4.2226562 2.8085938 L 2.8085938 4.2226562 L 4.9296875 6.34375 L 6.34375 4.9296875 L 4.2226562 2.8085938 z M 19.777344 2.8085938 L 17.65625 4.9296875 L 19.070312 6.34375 L 21.191406 4.2226562 L 19.777344 2.8085938 z M 12 5 C 8.1458514 5 5 8.1458514 5 12 C 5 15.854149 8.1458514 19 12 19 C 15.854149 19 19 15.854149 19 12 C 19 8.1458514 15.854149 5 12 5 z M 12 7 C 14.773268 7 17 9.2267316 17 12 C 17 14.773268 14.773268 17 12 17 C 9.2267316 17 7 14.773268 7 12 C 7 9.2267316 9.2267316 7 12 7 z M 0 11 L 0 13 L 3 13 L 3 11 L 0 11 z M 21 11 L 21 13 L 24 13 L 24 11 L 21 11 z M 4.9296875 17.65625 L 2.8085938 19.777344 L 4.2226562 21.191406 L 6.34375 19.070312 L 4.9296875 17.65625 z M 19.070312 17.65625 L 17.65625 19.070312 L 19.777344 21.191406 L 21.191406 19.777344 L 19.070312 17.65625 z M 11 21 L 11 24 L 13 24 L 13 21 L 11 21 z"/></svg>
</div>
</nav>
</div>
</header>
<header>
<div class="wrap">
<nav class="navbar">
<?= $logo; ?>
<div id="toggledark">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px">
<path d="M 11 0 L 11 3 L 13 3 L 13 0 L 11 0 z M 4.2226562 2.8085938 L 2.8085938 4.2226562 L 4.9296875 6.34375 L 6.34375 4.9296875 L 4.2226562 2.8085938 z M 19.777344 2.8085938 L 17.65625 4.9296875 L 19.070312 6.34375 L 21.191406 4.2226562 L 19.777344 2.8085938 z M 12 5 C 8.1458514 5 5 8.1458514 5 12 C 5 15.854149 8.1458514 19 12 19 C 15.854149 19 19 15.854149 19 12 C 19 8.1458514 15.854149 5 12 5 z M 12 7 C 14.773268 7 17 9.2267316 17 12 C 17 14.773268 14.773268 17 12 17 C 9.2267316 17 7 14.773268 7 12 C 7 9.2267316 9.2267316 7 12 7 z M 0 11 L 0 13 L 3 13 L 3 11 L 0 11 z M 21 11 L 21 13 L 24 13 L 24 11 L 21 11 z M 4.9296875 17.65625 L 2.8085938 19.777344 L 4.2226562 21.191406 L 6.34375 19.070312 L 4.9296875 17.65625 z M 19.070312 17.65625 L 17.65625 19.070312 L 19.777344 21.191406 L 21.191406 19.777344 L 19.070312 17.65625 z M 11 21 L 11 24 L 13 24 L 13 21 L 11 21 z" />
</svg>
</div>
</nav>
</div>
</header>

View File

@ -2,13 +2,13 @@
<div class="box-flex">
<?= Data::LOGO_BIG; ?>
<div class="text-max-w500">
<?= $help; ?>.
</div>
</div>
<?= $help; ?>.
</div>
</div>
<div class="box-flex">
<a class="button-large" href="<?= getUrlByName('welcome', ['lang' => 'ru']); ?>">Русский</a>
<a class="button-large" href="<?= getUrlByName('welcome', ['lang' => 'en']); ?>">English</a>
</div>
</div>
<?= includeTemplate('footer'); ?>
<?= includeTemplate('footer'); ?>

View File

@ -4,4 +4,4 @@ Route::get('/')->controller('HomeController', ['index']);
Route::get('/{lang}')->controller('ArticleController', ['welcome'])->name('welcome');
Route::get('/{lang}/philosophy')->controller('ArticleController', ['philosophy']);
Route::get('/{lang}/yandex-metrica')->controller('ArticleController', ['yandex-metrica']);
Route::get('/{lang}/metrica')->controller('ArticleController', ['metrica']);