Initial commit

This commit is contained in:
2024-01-11 06:54:59 +07:00
commit 37070c626e
21 changed files with 1223 additions and 0 deletions

View File

@@ -0,0 +1,202 @@
<?php
declare(strict_types=1);
namespace mirzaev\notchat\views;
// Files of the project
use mirzaev\notchat\models\session,
mirzaev\notchat\models\account;
// Framework for PHP
use mirzaev\minimal\controller;
// Templater of views
use Twig\Loader\FilesystemLoader,
Twig\Environment as twig,
Twig\Extra\Intl\IntlExtension as intl,
Twig\TwigFilter;
// Built-in libraries
use ArrayAccess;
/**
* Templater core
*
* @package mirzaev\notchat\views
* @author mirzaev < mail >
*/
final class templater extends controller implements ArrayAccess
{
/**
* Registry of global variables of view
*/
public array variables = [];
/**
* Instance of twig templater
*/
readonly public twig twig;
/**
* Constructor of an instance
*
* @param ?session session Instance of the session of ArangoDB
*
* @return void
*/
public function __construct(?session &session = null): void
{
// Initializing of an instance of twig
this->twig = new twig(new FilesystemLoader(VIEWS));
// Initializing of global variables
this->twig->addGlobal('theme', 'default');
this->twig->addGlobal('server', _SERVER);
this->twig->addGlobal('cookies', _COOKIE);
if (!empty(session->status())) {
this->twig->addGlobal('session', session);
}
// Initializing of twig extensions
this->twig->addExtension(new intl());
}
/**
* Render a HTML-document
*
* @param string file Related path to a HTML-document
* @param ?array variables Registry of variables to push into registry of global variables
*
* @return ?string HTML-документ
*/
public function render(string file, ?array variables = null): ?string
{
// Generation and exit (success)
return this->twig->render('themes' . DIRECTORY_SEPARATOR . this->twig->getGlobal('theme') . DIRECTORY_SEPARATOR . file, variables + this->variables);
}
/**
* Write
*
* Write a variable into registry of global variables
*
* @param string name Name of the variable
* @param mixed value Value of the variable
*
* @return void
*/
public function __set(string name, mixed value = null): void
{
// Write the variable and exit (success)
this->variables[name] = value;
}
/**
* Read
*
* Read a variable from registry of global variables
*
* @param string name Name of the variable
*
* @return mixed Content of the variable, if they are found
*/
public function __get(string name): mixed
{
// Read the variable and exit (success)
return this->variables[name];
}
/**
* Delete
*
* Delete a variable from the registry of global variables
*
* @param string name Name of the variable
*
* @return void
*/
public function __unset(string name): void
{
// Delete the variable and exit (success)
unset(this->variables[name]);
}
/**
* Check of initialization
*
* Check of initialization in registry of global variables
*
* @param string name Name of the variable
*
* @return bool The variable is initialized?
*/
public function __isset(string name): bool
{
// Check of initialization of the variable and exit (success)
return isset(this->variables[name]);
}
/**
* Write
*
* Write a variable into registry of global variables
*
* @param mixed name Name of an offset of the variable
* @param mixed value Value of the variable
*
* @return void
*/
public function offsetSet(mixed name, mixed value): void
{
// Write the variable and exit (success)
this->variables[name] = value;
}
/**
* Read
*
* Read a variable from registry of global variables
*
* @param mixed name Name of the variable
*
* @return mixed Content of the variable, if they are found
*/
public function offsetGet(mixed name): mixed
{
// Read the variable and exit (success)
return this->variables[name];
}
/**
* Delete
*
* Delete a variable from the registry of global variables
*
* @param mixed name Name of the variable
*
* @return void
*/
public function offsetUnset(mixed name): void
{
// Delete the variable and exit (success)
unset(this->variables[name]);
}
/**
* Check of initialization
*
* Check of initialization in registry of global variables
*
* @param mixed name Name of the variable
*
* @return bool The variable is initialized?
*/
public function offsetExists(mixed name): bool
{
// Check of initialization of the variable and exit (success)
return isset(this->variables[name]);
}
}

View File

@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="ru">
<head>
{% use 'head.html' with title as head_title, meta as head_meta, css as head_css %}
{% block title %}
{{ block('head_title') }}
{% endblock %}
{% block meta %}
{{ block('head_meta') }}
{% endblock %}
{{ block('head_css') }}
{% block css %}
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
{% include 'js.html' %}
{% block js %}
{% endblock %}
</body>
</html>

View File

@@ -0,0 +1,10 @@
{% block css %}
{% endblock %}
{% block body %}
<footer>
</footer>
{% endblock %}
{% block js %}
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% block title %}
<title>{% if head.title != empty %}{{head.title}}{% else %}notchat by mirzaev{% endif %}</title>
{% endblock %}
{% block meta %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% for meta in head.metas %}
<meta {% for name, value in meta.attributes %}{{name}}="{{value}}" {% endfor %}>
{% endfor %}
{% endblock %}
{% block css %}
<link type="text/css" rel="stylesheet" href="/css/themes/default/main.css" />
{% endblock %}

View File

@@ -0,0 +1,10 @@
{% block css %}
{% endblock %}
{% block body %}
<header>
</header>
{% endblock %}
{% block js %}
{% endblock %}

View File

@@ -0,0 +1,27 @@
{% extends "core.html" %}
{% use "core.html" with css as core_css, body as core, js as core_js %}
{% use "header.html" with css as header_css, body as header, js as header_js %}
{% use "footer.html" with css as footer_css, body as footer, js as footer_js %}
{% block css %}
{{ block('core_css') }}
{{ block('header_css') }}
{{ block('footer_css') }}
{% endblock %}
{% block body %}
{{ block('header') }}
<main>
{% block main %}
{{ main|raw }}
{% endblock %}
</main>
{{ block('footer') }}
{% endblock %}
{% block js %}
{{ block('footer_js') }}
{{ block('header_js') }}
{{ block('core_js') }}
{% endblock %}

View File

@@ -0,0 +1,2 @@
{% block js %}
{% endblock %}