generated from mirzaev/pot
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
1c6bbe3474 | |||
97c8c58ce0 |
11
README.md
11
README.md
@@ -1,2 +1,13 @@
|
||||
# works
|
||||
Main site of the Svoboda organisation
|
||||
|
||||
## Installation
|
||||
|
||||
### NGINX
|
||||
|
||||
1. Create a NGINX server
|
||||
You can copy an example of server file from here: `/examples/nginx/svoboda.conf`
|
||||
|
||||
2. Add support for javascript modules
|
||||
Edit the file `/etc/nginx/mime.types`<br>
|
||||
`application/javascript js;` -> `application/javascript js mjs;`
|
||||
|
@@ -23,7 +23,7 @@
|
||||
"require": {
|
||||
"php": "^8.4",
|
||||
"triagens/arangodb": "^3.8",
|
||||
"mirzaev/minimal": "^3.2.0",
|
||||
"mirzaev/minimal": "^3.3.0",
|
||||
"mirzaev/arangodb": "^1.3",
|
||||
"twig/twig": "^3.10",
|
||||
"twig/extra-bundle": "^3.7",
|
||||
|
1
damper.mjs
Submodule
1
damper.mjs
Submodule
Submodule damper.mjs added at 68589e968c
@@ -2,7 +2,7 @@ server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name svoboda.dev.mirzaev.sexy;
|
||||
server_name svoboda.works;
|
||||
|
||||
# 301 302
|
||||
return 301 https://$server_name$request_uri;
|
||||
@@ -14,7 +14,7 @@ server {
|
||||
listen [::]:443 ssl;
|
||||
listen [::]:443 quic;
|
||||
|
||||
server_name svoboda.dev.mirzaev.sexy;
|
||||
server_name svoboda.works;
|
||||
|
||||
http2 on;
|
||||
http3 on;
|
||||
@@ -31,7 +31,7 @@ server {
|
||||
keepalive_timeout 60;
|
||||
|
||||
include snippets/ssl-params.conf;
|
||||
include snippets/ssl-mirzaev.conf;
|
||||
include snippets/ssl-svoboda.conf;
|
||||
include snippets/php8_4.conf;
|
||||
|
||||
location / {
|
||||
@@ -44,7 +44,7 @@ server {
|
||||
add_header Cache-Control "max-age=2629746, public";
|
||||
}
|
||||
|
||||
location ~* \.(?:css|js)$ {
|
||||
location ~* \.(?:css|js|mjs|min)$ {
|
||||
expires 1y;
|
||||
access_log off;
|
||||
add_header Cache-Control "max-age=31556952, public";
|
1
graph.mjs
Submodule
1
graph.mjs
Submodule
Submodule graph.mjs added at 0300f33765
1
hotline.mjs
Submodule
1
hotline.mjs
Submodule
Submodule hotline.mjs added at 81aca40016
27
install.sh
27
install.sh
@@ -1,10 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Renaming project folder
|
||||
if [ -d author/project ]; then
|
||||
mv author/project author/works
|
||||
fi
|
||||
|
||||
# Renaming project author folder
|
||||
if [ -d author ]; then
|
||||
mv author svoboda
|
||||
fi
|
||||
|
||||
# Initializing the javascript modules folder
|
||||
if [ ! -d svoboda/works/system/public/js/modules ]; then
|
||||
mkdir -p ./svoboda/works/system/public/js/modules
|
||||
fi
|
||||
|
||||
# Updating repositories
|
||||
cd damper.mjs && git pull
|
||||
cd ../hotline.mjs && git pull
|
||||
cd ../graph.mjs && git pull
|
||||
cd ../
|
||||
|
||||
# Installing "damper.min.mjs"
|
||||
if [ ! -h svoboda/works/system/public/js/modules/damper.min.mjs ]; then
|
||||
ln -s ../../../../../../damper.mjs/damper.min.mjs svoboda/works/system/public/js/modules/damper.min.mjs
|
||||
fi
|
||||
|
||||
# installing "hotline.min.mjs"
|
||||
if [ ! -h svoboda/works/system/public/js/modules/hotline.min.mjs ]; then
|
||||
ln -s ../../../../../../hotline.mjs/hotline.min.mjs svoboda/works/system/public/js/modules/hotline.min.mjs
|
||||
fi
|
||||
|
||||
# Installing "graph.min.mjs"
|
||||
if [ ! -h svoboda/works/system/public/js/modules/graph.min.mjs ]; then
|
||||
ln -s ../../../../../../graph.mjs/graph.min.mjs svoboda/works/system/public/js/modules/graph.min.mjs
|
||||
fi
|
||||
|
@@ -5,9 +5,10 @@ declare(strict_types=1);
|
||||
namespace svoboda\works\controllers;
|
||||
|
||||
// Files of the project
|
||||
use svoboda\works\views\manager,
|
||||
use svoboda\works\views\templater,
|
||||
svoboda\works\models\core as models,
|
||||
svoboda\works\models\session;
|
||||
svoboda\works\models\session,
|
||||
svoboda\works\models\enumerations\language;
|
||||
|
||||
// Framework for PHP
|
||||
use mirzaev\minimal\core as minimal,
|
||||
@@ -71,18 +72,18 @@ class core extends controller
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param minimal $minimal Instance of the MINIMAL
|
||||
* @param minimal $core Instance of the MINIMAL
|
||||
* @param bool $initialize Initialize a controller?
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(minimal $minimal, bool $initialize = true)
|
||||
public function __construct(minimal $core, bool $initialize = true)
|
||||
{
|
||||
// Blocking requests from CloudFlare (better to write this blocking into nginx config file)
|
||||
if (isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] === 'nginx-ssl early hints') return status::bruh->label;
|
||||
|
||||
// For the extends system
|
||||
parent::__construct(core: $minimal);
|
||||
parent::__construct(core: $core);
|
||||
|
||||
if ($initialize) {
|
||||
// Requestet initializing
|
||||
@@ -90,7 +91,7 @@ class core extends controller
|
||||
// Initializing core of the models
|
||||
new models();
|
||||
|
||||
// Initializing of the date until which the session will be active
|
||||
/* // Initializing of the date until which the session will be active
|
||||
$expires = strtotime('+1 week');
|
||||
|
||||
// Initializing of default value of hash of the session
|
||||
@@ -116,10 +117,11 @@ class core extends controller
|
||||
'samesite' => 'strict'
|
||||
]
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
// Initializing of preprocessor of views
|
||||
$this->view = new templater($this->session);
|
||||
/* $this->view = new templater($this->session); */
|
||||
$this->view = new templater();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,7 +8,8 @@ namespace svoboda\works\controllers;
|
||||
use svoboda\works\controllers\core;
|
||||
|
||||
// Framework for PHP
|
||||
use mirzaev\minimal\http\enumerations\status;
|
||||
use mirzaev\minimal\http\enumerations\content,
|
||||
mirzaev\minimal\http\enumerations\status;
|
||||
|
||||
/**
|
||||
* Index
|
||||
@@ -43,8 +44,80 @@ final class index extends core
|
||||
if (str_contains($this->request->headers['accept'], content::any->value)) {
|
||||
// Request for any response
|
||||
|
||||
// Initializing distributions
|
||||
$this->view->distributions = [
|
||||
[
|
||||
'identifier' => 1,
|
||||
'name' => 'Dreamers',
|
||||
'members' => [
|
||||
[
|
||||
'identifier' => 1,
|
||||
'name' => [
|
||||
'first' => 'Arsen',
|
||||
'second' => 'Mirzaev',
|
||||
'other' => 'Tatyano-Muradovich'
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 2,
|
||||
'name' => [
|
||||
'first' => 'Margarita',
|
||||
'second' => 'Esenina',
|
||||
'other' => ''
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 5,
|
||||
'name' => [
|
||||
'first' => 'Maxim',
|
||||
'second' => '',
|
||||
'other' => ''
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 6,
|
||||
'name' => [
|
||||
'first' => 'Hidden',
|
||||
'second' => '',
|
||||
'other' => ''
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 7,
|
||||
'name' => [
|
||||
'first' => 'Hidden',
|
||||
'second' => '',
|
||||
'other' => ''
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 2,
|
||||
'name' => 'Unnamed',
|
||||
'members' => [
|
||||
[
|
||||
'identifier' => 3,
|
||||
'name' => [
|
||||
'first' => 'Pavel',
|
||||
'second' => '',
|
||||
'other' => ''
|
||||
]
|
||||
],
|
||||
[
|
||||
'identifier' => 4,
|
||||
'name' => [
|
||||
'first' => 'Georgiy',
|
||||
'second' => '',
|
||||
'other' => ''
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
// Render page
|
||||
$page = $this->view->render('index.html');
|
||||
$page = $this->view->render('/pages/statistics/total.html');
|
||||
|
||||
// Sending response
|
||||
$this->response
|
||||
|
@@ -8,15 +8,6 @@ namespace svoboda\works\models;
|
||||
use mirzaev\minimal\model,
|
||||
mirzaev\minimal\http\enumerations\status;
|
||||
|
||||
// Framework for ArangoDB
|
||||
use mirzaev\arangodb\connection as arangodb,
|
||||
mirzaev\arangodb\collection,
|
||||
mirzaev\arangodb\document;
|
||||
|
||||
// Library for ArangoDB
|
||||
use ArangoDBClient\Document as _document,
|
||||
ArangoDBClient\DocumentHandler as _document_handler;
|
||||
|
||||
// Built-in libraries
|
||||
use exception;
|
||||
|
||||
@@ -29,27 +20,12 @@ use exception;
|
||||
* @param arangodb $arangodb Instance of the ArangoDB session
|
||||
*
|
||||
* @method void __construct(bool $initialize, ?arangodb $arangodb) Constructor
|
||||
* @method _document|static|array|null read(string $filter, string $sort, int $amount, int $page, string $return, array $parameters, array &$errors) Read document from ArangoDB
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author svoboda <mail@domain.zone>
|
||||
*/
|
||||
class core extends model
|
||||
{
|
||||
/**
|
||||
* ArangoDB connection daa
|
||||
*
|
||||
* @var string ARANGODB Path to the file with ArangoDB session connection data
|
||||
*/
|
||||
final public const string ARANGODB = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'settings' . DIRECTORY_SEPARATOR . 'arangodb.php';
|
||||
|
||||
/**
|
||||
* ArangoDB
|
||||
*
|
||||
* @var arangodb $arangodb Instance of the ArangoDB session
|
||||
*/
|
||||
protected static arangodb $arangodb;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -58,173 +34,10 @@ class core extends model
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(bool $initialize = true, ?arangodb $arangodb = null)
|
||||
public function __construct(bool $initialize = true)
|
||||
{
|
||||
// For the extends system
|
||||
parent::__construct($initialize);
|
||||
|
||||
if ($initialize) {
|
||||
// Initializing is requested
|
||||
|
||||
// Writing an instance of a session of ArangoDB to the property
|
||||
self::$arangodb = $arangodb ?? new arangodb(require static::ARANGODB);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read document from ArangoDB
|
||||
*
|
||||
* @param string $filter Expression for filtering (AQL)
|
||||
* @param string $sort Expression for sorting (AQL)
|
||||
* @param int $amount Amount of documents for collect
|
||||
* @param int $page Page
|
||||
* @param string $return Expression describing the parameters to return (AQL)
|
||||
* @param array $parameters Binded parameters for placeholders ['placeholder' => parameter]
|
||||
* @param array &$errors Registry of errors
|
||||
*
|
||||
* @return mixed An array of instances of documents from ArangoDB, if they are found
|
||||
*/
|
||||
public static function _read(
|
||||
string $filter = '',
|
||||
string $sort = 'd.created DESC, d._key DESC',
|
||||
int $amount = 1,
|
||||
int $page = 1,
|
||||
string $return = 'd',
|
||||
array $parameters = [],
|
||||
array &$errors = []
|
||||
): _document|static|array|null {
|
||||
try {
|
||||
if (collection::initialize(static::COLLECTION, static::TYPE)) {
|
||||
// Initialized the collection
|
||||
|
||||
// Read from ArangoDB
|
||||
$result = collection::execute(
|
||||
sprintf(
|
||||
<<<'AQL'
|
||||
FOR d IN @@collection
|
||||
%s
|
||||
%s
|
||||
LIMIT @offset, @amount
|
||||
RETURN %s
|
||||
AQL,
|
||||
empty($filter) ? '' : "FILTER $filter",
|
||||
empty($sort) ? '' : "SORT $sort",
|
||||
empty($return) ? 'd' : $return
|
||||
),
|
||||
[
|
||||
'@collection' => static::COLLECTION,
|
||||
'offset' => --$page <= 0 ? 0 : $page * $amount,
|
||||
'amount' => $amount
|
||||
] + $parameters,
|
||||
errors: $errors
|
||||
);
|
||||
|
||||
if ($amount === 1 && $result instanceof _document) {
|
||||
// Received only 1 document and @todo rebuild
|
||||
|
||||
// Initializing the object
|
||||
$object = new static;
|
||||
|
||||
if (method_exists($object, '__document')) {
|
||||
// Object can implement a document from ArangoDB
|
||||
|
||||
// Writing the instance of document from ArangoDB to the implement object
|
||||
$object->__document($result);
|
||||
|
||||
// Exit (success)
|
||||
return $object;
|
||||
}
|
||||
}
|
||||
|
||||
// Exit (success)
|
||||
return $result;
|
||||
} else throw new exception('Failed to initialize ' . static::TYPE . ' collection: ' . static::COLLECTION);
|
||||
} catch (exception $e) {
|
||||
// Writing to registry of errors
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
// Exit (fail)
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
* @param mixed $value Value of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __set(string $name, mixed $value = null): void
|
||||
{
|
||||
match ($name) {
|
||||
'arangodb' => (function () use ($value) {
|
||||
if (isset(static::$arangodb)) throw new exception('Forbidden to reinitialize the ArangoDB session($this::$arangodb)', status::internal_server_error->value);
|
||||
else if ($value instanceof arangodb) self::$arangodb = $value;
|
||||
else throw new exception('Session of connection to ArangoDB ($this::$arangodb) is need to be mirzaev\arangodb\connection', status::internal_server_error->value);
|
||||
})(),
|
||||
default => parent::__set($name, $value)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Read
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return mixed Content of the property, if they are found
|
||||
*/
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
return match ($name) {
|
||||
default => parent::__get($name)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __unset(string $name): void
|
||||
{
|
||||
// Deleting a property and exit (success)
|
||||
parent::__unset($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check of initialization
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return bool The property is initialized?
|
||||
*/
|
||||
public function __isset(string $name): bool
|
||||
{
|
||||
// Check of initialization of the property and exit (success)
|
||||
return parent::__isset($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call a static property or method
|
||||
*
|
||||
* @param string $name Name of the property or the method
|
||||
* @param array $arguments Arguments for the method
|
||||
*/
|
||||
public static function __callStatic(string $name, array $arguments): mixed
|
||||
{
|
||||
return match ($name) {
|
||||
'arangodb' => (new static)->__get('arangodb'),
|
||||
default => throw new exception("Not found: $name", 500)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace svoboda\works\models\interfaces;
|
||||
|
||||
// Framework for ArangoDB
|
||||
use mirzaev\arangodb\enumerations\collection\type;
|
||||
|
||||
/**
|
||||
* Collection
|
||||
*
|
||||
* Interface for implementing a collection from ArangoDB
|
||||
*
|
||||
* @package svoboda\works\models\interfaces
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author svoboda <mail@domain.zone>
|
||||
*/
|
||||
interface collection
|
||||
{
|
||||
/**
|
||||
* Name of the collection in ArangoDB
|
||||
*/
|
||||
public const string COLLECTION = 'THIS_COLLECTION_SHOULD_NOT_EXIST';
|
||||
|
||||
/**
|
||||
* Type of the collection in ArangoDB
|
||||
*/
|
||||
public const type TYPE = type::document;
|
||||
}
|
@@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace svoboda\works\models\interfaces;
|
||||
|
||||
// Library для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
/**
|
||||
* Document
|
||||
*
|
||||
* Interface for implementing a document instance from ArangoDB
|
||||
*
|
||||
* @param _document $document An instance of the ArangoDB document from ArangoDB (protected readonly)
|
||||
*
|
||||
* @package svoboda\works\models\interfaces
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author svoboda <mail@domain.zone>
|
||||
*/
|
||||
interface document
|
||||
{
|
||||
/**
|
||||
* Write
|
||||
*
|
||||
* Write a property into an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
* @param mixed $value Content of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __set(string $name, mixed $value = null): void;
|
||||
|
||||
/**
|
||||
* Read
|
||||
*
|
||||
* Read a property from an instance of the ArangoDB docuemnt
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return mixed Content of the property
|
||||
*/
|
||||
public function __get(string $name): mixed;
|
||||
|
||||
|
||||
/**
|
||||
* Delete
|
||||
*
|
||||
* Deinitialize the property in an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __unset(string $name): void;
|
||||
|
||||
/**
|
||||
* Check of initialization
|
||||
*
|
||||
* Check of initialization of the property into an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return bool The property is initialized?
|
||||
*/
|
||||
public function __isset(string $name): bool;
|
||||
|
||||
/**
|
||||
* Execute a method
|
||||
*
|
||||
* Execute a method from an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the method
|
||||
* @param array $arguments Arguments for the method
|
||||
*
|
||||
* @return mixed Result of execution of the method
|
||||
*/
|
||||
public function __call(string $name, array $arguments = []): mixed;
|
||||
}
|
@@ -1,206 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace svoboda\works\models\traits;
|
||||
|
||||
// Files of the project
|
||||
use svoboda\works\models\interfaces\document as document_interface,
|
||||
svoboda\works\models\interfaces\collection as collection_interface,
|
||||
svoboda\works\models\connect;
|
||||
|
||||
// Library для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Framework for ArangoDB
|
||||
use mirzaev\arangodb\connection as arangodb,
|
||||
mirzaev\arangodb\document as framework_document,
|
||||
mirzaev\arangodb\collection;
|
||||
|
||||
// Built-in libraries
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Trait for implementing a document instance from ArangoDB
|
||||
*
|
||||
* @uses document_interface
|
||||
*
|
||||
* @var protected readonly _document|null $document An instance of the ArangoDB document
|
||||
*
|
||||
* @package svoboda\works\models\traits
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author svoboda <mail@domain.zone>
|
||||
*/
|
||||
trait document
|
||||
{
|
||||
/**
|
||||
* Document
|
||||
*
|
||||
* @var _document $document An instance of the document from ArangoDB
|
||||
*/
|
||||
protected readonly _document $document;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param bool $initialize Initialize a model?
|
||||
* @param ?arangodb $arangodb Instance of a session of ArangoDB
|
||||
* @param _document|null|false $document An instance of the ArangoDB document
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
bool $initialize = true,
|
||||
?arangodb $arangodb = null,
|
||||
_document|null|false $document = false
|
||||
) {
|
||||
// For the extends system
|
||||
parent::__construct($initialize, $arangodb);
|
||||
|
||||
// Writing to the property
|
||||
if ($document instanceof _document) $this->__document($document);
|
||||
else if ($document === null) throw new exception('Failed to initialize an instance of the document from ArangoDB');
|
||||
}
|
||||
|
||||
/**
|
||||
* Write or read document
|
||||
*
|
||||
* @param _document|null $document Instance of document from ArangoDB
|
||||
*
|
||||
* @return _document|null Instance of document from ArangoDB
|
||||
*/
|
||||
public function __document(?_document $document = null): ?_document
|
||||
{
|
||||
// Writing a property storing a document instance to ArangoDB
|
||||
if ($document) $this->document ??= $document;
|
||||
|
||||
// Read a property storing a document instance to ArangoDB and exit (success)
|
||||
return $this->document ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect
|
||||
*
|
||||
* @param collecton_interface $document Document
|
||||
* @param array &$errors Registry of errors
|
||||
*
|
||||
* @return string|null The identifier of the created edge of the "connect" collection, if created
|
||||
*/
|
||||
public function connect(collection_interface $document, array &$errors = []): ?string
|
||||
{
|
||||
try {
|
||||
if (collection::initialize(static::COLLECTION, static::TYPE, errors: $errors)) {
|
||||
if (collection::initialize(connect::COLLECTION, connect::TYPE, errors: $errors)) {
|
||||
if (collection::initialize($document::COLLECTION, $document::TYPE, errors: $errors)) {
|
||||
// Initialized collections
|
||||
|
||||
if ($this->document instanceof _document) {
|
||||
// Initialized instance of the document from ArangoDB
|
||||
|
||||
// Writing document and exit (success)
|
||||
return framework_document::write(
|
||||
connect::COLLECTION,
|
||||
[
|
||||
'_from' => $document->getId(),
|
||||
'_to' => $this->document->getId()
|
||||
],
|
||||
errors: $errors
|
||||
);
|
||||
} else throw new exception('The instance of the document from ArangoDB is not initialized');
|
||||
} else throw new exception('Failed to initialize ' . $document::TYPE . ' collection: ' . $document::COLLECTION);
|
||||
} else throw new exception('Failed to initialize ' . connect::TYPE . ' collection: ' . connect::COLLECTION);
|
||||
} else throw new exception('Failed to initialize ' . static::TYPE . ' collection: ' . static::COLLECTION);
|
||||
} catch (exception $e) {
|
||||
// Writing to the registry of errors
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
// Exit (fail)
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write
|
||||
*
|
||||
* Write a property into an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
* @param mixed $value Content of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __set(string $name, mixed $value = null): void
|
||||
{
|
||||
// Writing to the property into an instance of the ArangoDB document and exit (success)
|
||||
$this->document->{$name} = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read
|
||||
*
|
||||
* Read a property from an instance of the ArangoDB docuemnt
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return mixed Content of the property
|
||||
*/
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
// Read a property from an instance of the ArangoDB document and exit (success)
|
||||
return match ($name) {
|
||||
default => $this->document->{$name}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete
|
||||
*
|
||||
* Deinitialize the property in an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __unset(string $name): void
|
||||
{
|
||||
// Delete the property in an instance of the ArangoDB document and exit (success)
|
||||
unset($this->document->{$name});
|
||||
}
|
||||
|
||||
/**
|
||||
* Check of initialization
|
||||
*
|
||||
* Check of initialization of the property into an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the property
|
||||
*
|
||||
* @return bool The property is initialized?
|
||||
*/
|
||||
public function __isset(string $name): bool
|
||||
{
|
||||
// Check of initializatio nof the property and exit (success)
|
||||
return isset($this->document->{$name});
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute a method
|
||||
*
|
||||
* Execute a method from an instance of the ArangoDB document
|
||||
*
|
||||
* @param string $name Name of the method
|
||||
* @param array $arguments Arguments for the method
|
||||
*
|
||||
* @return mixed Result of execution of the method
|
||||
*/
|
||||
public function __call(string $name, array $arguments = []): mixed
|
||||
{
|
||||
// Execute the method and exit (success)
|
||||
return method_exists($this->document, $name) ? $this->document->{$name}($arguments) ?? null : null;
|
||||
}
|
||||
}
|
34
svoboda/works/system/public/css/fonts/dejavu.css
Executable file
34
svoboda/works/system/public/css/fonts/dejavu.css
Executable file
@@ -0,0 +1,34 @@
|
||||
@font-face {
|
||||
font-family: 'DejaVu';
|
||||
src: url("/fonts/dejavu/DejaVuLGCSans-ExtraLight.ttf");
|
||||
font-weight: 200;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'DejaVu';
|
||||
src: url("/fonts/dejavu/DejaVuLGCSans.ttf");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'DejaVu';
|
||||
src: url("/fonts/dejavu/DejaVuLGCSans-Oblique.ttf");
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'DejaVu';
|
||||
src: url("/fonts/dejavu/DejaVuLGCSans-Bold.ttf");
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'DejaVu';
|
||||
src: url("/fonts/dejavu/DejaVuLGCSans-BoldOblique.ttf");
|
||||
font-weight: 500;
|
||||
font-style: italic;
|
||||
}
|
139
svoboda/works/system/public/css/fonts/fira.css
Executable file
139
svoboda/works/system/public/css/fonts/fira.css
Executable file
@@ -0,0 +1,139 @@
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Hair.woff2') format('woff2'), url('/fonts/fira/FiraSans-Hair.woff') format('woff');
|
||||
font-weight: 100;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-HairItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-HairItalic.woff') format('woff');
|
||||
font-weight: 100;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-UltraLight.woff2') format('woff2'), url('/fonts/fira/FiraSans-UltraLight.woff') format('woff');
|
||||
font-weight: 200;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-UltraLightItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-UltraLightItalic.woff') format('woff');
|
||||
font-weight: 200;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Light.woff2') format('woff2'), url('/fonts/fira/FiraSans-Light.woff') format('woff');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-LightItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-LightItalic.woff') format('woff');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Regular.woff2') format('woff2'), url('/fonts/fira/FiraSans-Regular.woff') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Italic.woff2') format('woff2'), url('/fonts/fira/FiraSans-Italic.woff') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraMono-Medium.woff2') format('woff2'), url('/fonts/fira/FiraMono-Medium.woff') format('woff');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-MediumItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-MediumItalic.woff') format('woff');
|
||||
font-weight: 500;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-SemiBold.woff2') format('woff2'), url('/fonts/fira/FiraSans-SemiBold.woff') format('woff');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-SemiBoldItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-SemiBoldItalic.woff') format('woff');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Bold.woff2') format('woff2'), url('/fonts/fira/FiraSans-Bold.woff') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-BoldItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-BoldItalic.woff') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-ExtraBold.woff2') format('woff2'), url('/fonts/fira/FiraSans-ExtraBold.woff') format('woff');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-ExtraBoldItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-ExtraBoldItalic.woff') format('woff');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-Heavy.woff2') format('woff2'), url('/fonts/fira/FiraSans-Heavy.woff') format('woff');
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira';
|
||||
src: url('/fonts/fira/FiraSans-HeavyItalic.woff2') format('woff2'), url('/fonts/fira/FiraSans-HeavyItalic.woff') format('woff');
|
||||
font-weight: 900;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira' Mono;
|
||||
src: url('/fonts/fira/FiraMono-Regular.woff2') format('woff2'), url('/fonts/fira/FiraMono-Regular.woff') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira' Mono;
|
||||
src: url('/fonts/fira/FiraMono-Bold.woff2') format('woff2'), url('/fonts/fira/FiraMono-Bold.woff') format('woff');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
31
svoboda/works/system/public/css/fonts/hack.css
Executable file
31
svoboda/works/system/public/css/fonts/hack.css
Executable file
@@ -0,0 +1,31 @@
|
||||
@font-face {
|
||||
font-family: 'Hack';
|
||||
src: url('/fonts/hack/hack-regular.woff2?sha=3114f1256') format('woff2'), url('/fonts/hack/hack-regular.woff?sha=3114f1256') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Hack';
|
||||
src: url('/fonts/hack/hack-bold.woff2?sha=3114f1256') format('woff2'), url('/fonts/hack/hack-bold.woff?sha=3114f1256') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Hack';
|
||||
src: url('/fonts/hack/hack-italic.woff2?sha=3114f1256') format('woff2'), url('/fonts/hack/hack-italic.woff?sha=3114f1256') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Hack';
|
||||
src: url('/fonts/hack/hack-bolditalic.woff2?sha=3114f1256') format('woff2'), url('/fonts/hack/hack-bolditalic.woff?sha=3114f1256') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
}
|
@@ -1,13 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: grid;
|
||||
grid-template-rows: max(150px, 15vh) auto;
|
||||
grid-template-columns: 60px auto 60px;
|
||||
gap: var(--gap);
|
||||
overflow: hidden;
|
||||
background-color: var(--background-color);
|
||||
}
|
@@ -1,215 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
main {
|
||||
z-index: 200;
|
||||
margin-bottom: var(--gap);
|
||||
grid-row: 2 / 3;
|
||||
grid-column: 2 / 3;
|
||||
display: grid;
|
||||
grid-template-rows: 2rem 43px auto;
|
||||
gap: var(--gap);
|
||||
}
|
||||
|
||||
main > nav {
|
||||
z-index: 200;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
main > nav > * {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
main > nav#timeline {
|
||||
margin-bottom: -0.3rem;
|
||||
grid-row: 1 / 2;
|
||||
padding: 0 0.5rem;
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
main > nav#timeline > * {
|
||||
padding: 0.5rem;
|
||||
font-weight: bold;
|
||||
color: var(--section-timeline-button-color);
|
||||
}
|
||||
|
||||
main > nav#timeline > *:is(:hover, :focus) {
|
||||
color: var(--section-timeline-button-color-hover);
|
||||
}
|
||||
|
||||
main > nav#timeline > *:active {
|
||||
color: var(--section-timeline-button-color-active);
|
||||
}
|
||||
|
||||
main > nav#timeline > *.selected {
|
||||
color: var(--section-timeline-button-selected-color);
|
||||
}
|
||||
|
||||
main > nav#timeline > *.selected:is(:hover, :focus) {
|
||||
color: var(--section-timeline-button-selected-color-hover);
|
||||
}
|
||||
|
||||
main > nav#timeline > *.selected:active {
|
||||
color: var(--section-timeline-button-selected-color-active);
|
||||
}
|
||||
|
||||
main > nav#menu {
|
||||
grid-row: 2 / 3;
|
||||
border-radius: 0.75rem;
|
||||
background-color: var(--section-menu-background-color);
|
||||
-webkit-box-shadow: 0px 0px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow: 0px 0px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: 0px 0px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
main > nav#menu > * {
|
||||
height: 100%;
|
||||
padding: 0 1rem;
|
||||
color: var(--section-menu-button-color);
|
||||
}
|
||||
|
||||
main > nav#menu > *:first-child {
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
main > nav#menu > *.selected:is(:hover, :focus),
|
||||
main > nav#menu > *:is(:hover, :focus) {
|
||||
background-color: var(--section-menu-button-background-color-hover);
|
||||
}
|
||||
|
||||
main > nav#menu > *.selected {
|
||||
background-color: var(--section-menu-button-background-color-selected);
|
||||
}
|
||||
|
||||
main > nav#menu > *.selected:active,
|
||||
main > nav#menu > *:active {
|
||||
background-color: var(--section-menu-button-background-color-active);
|
||||
}
|
||||
|
||||
main > section {
|
||||
z-index: 200;
|
||||
grid-row: 3 / 4;
|
||||
padding: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--gap);
|
||||
border-radius: 0.75rem;
|
||||
background-color: var(--section-background-color);
|
||||
-webkit-box-shadow: 0px 3px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow: 0px 3px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: 0px 3px 12px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
main > section > h1 {
|
||||
margin: 0.5rem 1rem 0.5rem 1rem;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
main > section > h1.row {
|
||||
align-items: center;
|
||||
gap: var(--gap);
|
||||
}
|
||||
|
||||
main > section > h1 > a {
|
||||
min-width: 1rem;
|
||||
height: 100%;
|
||||
padding: 0.2rem;
|
||||
display: inline-flex;
|
||||
justify-content: start;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
main > section > h1 > a:first-of-type {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
main > section > div.row {
|
||||
padding: 0rem 1rem;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
main > section .block {
|
||||
background: var(--section-block-background-color);
|
||||
}
|
||||
|
||||
main > section .block.text {
|
||||
padding: 0.6rem 0.8rem;
|
||||
display: inline-flex;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
main > section .block.text > a.continue {
|
||||
margin-left: auto;
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
||||
main > section p.block {
|
||||
margin: unset;
|
||||
}
|
||||
|
||||
main > section ul.block {
|
||||
min-width: 200px;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
main > section > div.footer > small.phrase {
|
||||
flex-grow: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
main > section > div.footer > small#views {
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
main > section > div.footer > small#views > * {
|
||||
z-index: 500;
|
||||
}
|
||||
|
||||
main > section > div.footer > small#views > div.visibility {
|
||||
z-index: 300;
|
||||
position: absolute;
|
||||
right: calc(-100px + 10.5px + 0rem);
|
||||
top: calc(-100px + 0.5rem);
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
/* pointer-events: none; */
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column {
|
||||
margin-top: auto;
|
||||
width: 100%;
|
||||
height: fit-content;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--gap);
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column:has(svg.chart) {
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column > svg.pie {
|
||||
height: min(30%, 300px);
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column > small.formula {
|
||||
margin: 0 1.4rem;
|
||||
padding-right: 4rem;
|
||||
font-size: 0.8rem;
|
||||
color: var(--diagram-legend-text-color);
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column > svg.chart {
|
||||
margin: -2.5rem -1rem -3rem;
|
||||
width: calc(100% + 1rem);
|
||||
}
|
||||
|
||||
main > section#total > div#diagram.column > div.background {
|
||||
width: 100%;
|
||||
height: 170px;
|
||||
}
|
@@ -1,117 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
:root {
|
||||
--gap: min(12px, 1rem);
|
||||
transition: 0.1s ease-out;
|
||||
}
|
||||
|
||||
* {
|
||||
/* font-family: , system-ui, sans-serif; */
|
||||
font-family: "dejavu";
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Selection */
|
||||
|
||||
::selection {
|
||||
border-radius: 2px;
|
||||
color: var(--text-selected-color);
|
||||
background: var(--text-selected-background-color);
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
border-radius: 2px;
|
||||
color: var(--text-selected-color);
|
||||
background: var(--text-selected-background-color);
|
||||
}
|
||||
|
||||
.unselectable {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* Buttons and links */
|
||||
|
||||
a,
|
||||
*[type="button"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a,
|
||||
a > * {
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
a:is(:hover, :focus),
|
||||
a:is(:hover, :focus) > * {
|
||||
color: var(--link-color-hover);
|
||||
}
|
||||
|
||||
a:active,
|
||||
a:active > * {
|
||||
color: var(--link-color-active);
|
||||
}
|
||||
|
||||
/* Wrappers */
|
||||
|
||||
:is(.row, .column) {
|
||||
gap: var(--gap);
|
||||
}
|
||||
|
||||
.row:not(.column) {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.column:not(.row) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* Macroses */
|
||||
|
||||
.rounded {
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
|
||||
.grow {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
|
||||
:is(ol, ul) {
|
||||
margin: unset;
|
||||
padding: 0.6rem 0.8rem;
|
||||
gap: 0.3rem;
|
||||
}
|
||||
|
||||
:is(ol, ul):is(.column, .row) {
|
||||
gap: 0.3rem;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
li > span.name:first-child:after {
|
||||
content: ":";
|
||||
}
|
||||
|
||||
li > span.value:last-child {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
li > span.value:last-child:before {
|
||||
content: var(--old);
|
||||
margin-right: 0.4rem;
|
||||
font-size: 0.8rem;
|
||||
text-decoration: line-through;
|
||||
color: var(--text-notice-color);
|
||||
}
|
BIN
svoboda/works/system/public/fonts/commissioner.ttf
Executable file
BIN
svoboda/works/system/public/fonts/commissioner.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-Bold.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-Bold.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-BoldOblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-BoldOblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-ExtraLight.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-ExtraLight.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-Oblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans-Oblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSans.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-Bold.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-Bold.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-BoldOblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-BoldOblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-Oblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed-Oblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansCondensed.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-Bold.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-Bold.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-BoldOblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-BoldOblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-Oblique.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono-Oblique.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSansMono.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-Bold.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-Bold.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-BoldItalic.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-BoldItalic.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-Italic.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif-Italic.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerif.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-Bold.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-Bold.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-BoldItalic.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-BoldItalic.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-Italic.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed-Italic.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed.ttf
Executable file
BIN
svoboda/works/system/public/fonts/dejavu/DejaVuLGCSerifCondensed.ttf
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Bold.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Bold.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Bold.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Bold.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Medium.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Medium.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Medium.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Medium.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Regular.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Regular.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Regular.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraMono-Regular.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Bold.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Bold.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Bold.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Bold.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BoldItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BoldItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BoldItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BoldItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Book.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Book.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Book.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Book.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BookItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BookItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BookItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-BookItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Eight.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Eight.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Eight.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Eight.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-EightItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-EightItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-EightItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-EightItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBold.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBold.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBold.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBold.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLight.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLight.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLight.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLight.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Four.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Four.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Four.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Four.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-FourItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-FourItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-FourItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-FourItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Hair.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Hair.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Hair.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Hair.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HairItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HairItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HairItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HairItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Heavy.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Heavy.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Heavy.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Heavy.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HeavyItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HeavyItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HeavyItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-HeavyItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Italic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Italic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Italic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Italic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Light.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Light.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Light.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Light.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-LightItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-LightItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-LightItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-LightItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Medium.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Medium.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Medium.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Medium.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-MediumItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-MediumItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-MediumItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-MediumItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Regular.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Regular.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Regular.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Regular.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBold.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBold.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBold.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBold.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Thin.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Thin.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Thin.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Thin.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ThinItalic.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ThinItalic.woff
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ThinItalic.woff2
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-ThinItalic.woff2
Executable file
Binary file not shown.
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Two.woff
Executable file
BIN
svoboda/works/system/public/fonts/fira/FiraSans-Two.woff
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user