WIP: Popravki prevodov in urednikovanja #69

Draft
g1smo wants to merge 10 commits from popravki-prevodi-urednikovanje into master
61 changed files with 888 additions and 276 deletions

View File

@ -1,7 +1,7 @@
name: yufu-manifest name: yufu-manifest
type: drupal10 type: drupal10
docroot: web docroot: web
php_version: "8.1" php_version: "8.2"
webserver_type: nginx-fpm webserver_type: nginx-fpm
router_http_port: "80" router_http_port: "80"
router_https_port: "443" router_https_port: "443"
@ -10,12 +10,13 @@ additional_hostnames: []
additional_fqdns: [] additional_fqdns: []
database: database:
type: mariadb type: mariadb
version: "10.3" version: "10.6"
nfs_mount_enabled: false nfs_mount_enabled: false
mutagen_enabled: false mutagen_enabled: false
use_dns_when_possible: true use_dns_when_possible: true
composer_version: "2" composer_version: "2"
web_environment: [] web_environment: []
nodejs_version: "16"
# Key features of ddev's config.yaml: # Key features of ddev's config.yaml:
@ -26,7 +27,7 @@ web_environment: []
# docroot: <relative_path> # Relative path to the directory containing index.php. # docroot: <relative_path> # Relative path to the directory containing index.php.
# php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1" # php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2"
# You can explicitly specify the webimage but this # You can explicitly specify the webimage but this
# is not recommended, as the images are often closely tied to ddev's' behavior, # is not recommended, as the images are often closely tied to ddev's' behavior,
@ -61,12 +62,26 @@ web_environment: []
# see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# For example Europe/Dublin or MST7MDT # For example Europe/Dublin or MST7MDT
# composer_root: <relative_path>
# Relative path to the composer root directory from the project root. This is
# the directory which contains the composer.json and where all Composer related
# commands are executed.
# composer_version: "2" # composer_version: "2"
# if composer_version:"2" it will use the most recent composer v2 # You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
# It can also be set to "1", to get most recent composer v1 # to use the latest major version available at the time your container is built.
# or "" for the default v2 created at release time. # It is also possible to use each other Composer version channel. This includes:
# It can be set to any existing specific composer version. # - 2.2 (latest Composer LTS version)
# After first project 'ddev start' this will not be updated until it changes # - stable
# - preview
# - snapshot
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
# To reinstall Composer after the image was built, run "ddev debug refresh".
# nodejs_version: "16"
# change from the default system Node.js version to another supported version, like 12, 14, 17, 18.
# Note that you can use 'ddev nvm' or nvm inside the web container to provide nearly any
# Node.js version, including v6, etc.
# additional_hostnames: # additional_hostnames:
# - somename # - somename
@ -82,6 +97,8 @@ web_environment: []
# upload_dir: custom/upload/dir # upload_dir: custom/upload/dir
# would set the destination path for ddev import-files to <docroot>/custom/upload/dir # would set the destination path for ddev import-files to <docroot>/custom/upload/dir
# When mutagen is enabled this path is bind-mounted so that all the files
# in the upload_dir don't have to be synced into mutagen
# working_dir: # working_dir:
# web: /var/www/html # web: /var/www/html
@ -99,11 +116,11 @@ web_environment: []
# nfs_mount_enabled: false # nfs_mount_enabled: false
# Great performance improvement but requires host configuration first. # Great performance improvement but requires host configuration first.
# See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container # See https://ddev.readthedocs.io/en/latest/users/install/performance/#nfs
# mutagen_enabled: false # mutagen_enabled: false
# Experimental performance improvement using mutagen asynchronous updates. # Performance improvement using mutagen asynchronous updates.
# See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen # See https://ddev.readthedocs.io/en/latest/users/install/performance/#mutagen
# fail_on_hook_fail: False # fail_on_hook_fail: False
# Decide whether 'ddev start' should be interrupted by a failing hook # Decide whether 'ddev start' should be interrupted by a failing hook
@ -158,7 +175,7 @@ web_environment: []
# If you prefer you can change this to "ddev.local" to preserve # If you prefer you can change this to "ddev.local" to preserve
# pre-v1.9 behavior. # pre-v1.9 behavior.
# ngrok_args: --subdomain mysite --auth username:pass # ngrok_args: --basic-auth username:pass1234
# Provide extra flags to the "ngrok http" command, see # Provide extra flags to the "ngrok http" command, see
# https://ngrok.com/docs#http or run "ngrok http -h" # https://ngrok.com/docs#http or run "ngrok http -h"
@ -184,10 +201,57 @@ web_environment: []
# will be available on the local network if the host firewall # will be available on the local network if the host firewall
# allows it. # allows it.
# default_container_timeout: 120
# The default time that ddev waits for all containers to become ready can be increased from
# the default 120. This helps in importing huge databases, for example.
#web_extra_exposed_ports:
#- name: nodejs
# container_port: 3000
# http_port: 2999
# https_port: 3000
#- name: something
# container_port: 4000
# https_port: 4000
# http_port: 3999
# Allows a set of extra ports to be exposed via ddev-router
# The port behavior on the ddev-webserver must be arranged separately, for example
# using web_extra_daemons.
# For example, with a web app on port 3000 inside the container, this config would
# expose that web app on https://<project>.ddev.site:9999 and http://<project>.ddev.site:9998
# web_extra_exposed_ports:
# - container_port: 3000
# http_port: 9998
# https_port: 9999
#web_extra_daemons:
#- name: "http-1"
# command: "/var/www/html/node_modules/.bin/http-server -p 3000"
# directory: /var/www/html
#- name: "http-2"
# command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000"
# directory: /var/www/html
# override_config: false
# By default, config.*.yaml files are *merged* into the configuration
# But this means that some things can't be overridden
# For example, if you have 'nfs_mount_enabled: true'' you can't override it with a merge
# and you can't erase existing hooks or all environment variables.
# However, with "override_config: true" in a particular config.*.yaml file,
# 'nfs_mount_enabled: false' can override the existing values, and
# hooks:
# post-start: []
# or
# web_environment: []
# or
# additional_hostnames: []
# can have their intended affect. 'override_config' affects only behavior of the
# config.*.yaml file it exists in.
# Many ddev commands can be extended to run tasks before or after the # Many ddev commands can be extended to run tasks before or after the
# ddev command is executed, for example "post-start", "post-import-db", # ddev command is executed, for example "post-start", "post-import-db",
# "pre-composer", "post-composer" # "pre-composer", "post-composer"
# See https://ddev.readthedocs.io/en/stable/users/extending-commands/ for more # See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
# information on the commands that can be extended and the tasks you can define # information on the commands that can be extended and the tasks you can define
# for them. Example: # for them. Example:
#hooks: #hooks:

View File

@ -81,3 +81,4 @@ Razvojne kontejnerja lahko zlistamo z ukazom `ddev status`
## Mejli ## Mejli
Mailhog za debagiranje vklopimo, kot priporoči zgornji ukaz: `ddev launch -m` Mailhog za debagiranje vklopimo, kot priporoči zgornji ukaz: `ddev launch -m`
Vmesnik najdemo na naslovu: https://yufu-manifest.ddev.site:8026

View File

@ -24,7 +24,7 @@
"drupal/content_moderation_notifications": "^3.6", "drupal/content_moderation_notifications": "^3.6",
"drupal/core-composer-scaffold": "^10.0", "drupal/core-composer-scaffold": "^10.0",
"drupal/core-project-message": "^10.0", "drupal/core-project-message": "^10.0",
"drupal/core-recommended": "^10.2.4", "drupal/core-recommended": "^10.0",
"drupal/diff": "^1.1", "drupal/diff": "^1.1",
"drupal/devel": "^5.1", "drupal/devel": "^5.1",
"drupal/gin": "^3.0@RC", "drupal/gin": "^3.0@RC",

102
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "6467965d60acc01165ed81a57e9cf9e9", "content-hash": "fc0b93f34df38e9d2834fb79a5346bdf",
"packages": [ "packages": [
{ {
"name": "asm89/stack-cors", "name": "asm89/stack-cors",
@ -331,16 +331,16 @@
}, },
{ {
"name": "composer/semver", "name": "composer/semver",
"version": "3.4.0", "version": "3.4.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/semver.git", "url": "https://github.com/composer/semver.git",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -392,7 +392,7 @@
"support": { "support": {
"irc": "ircs://irc.libera.chat:6697/composer", "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues", "issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.0" "source": "https://github.com/composer/semver/tree/3.4.2"
}, },
"funding": [ "funding": [
{ {
@ -408,7 +408,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-08-31T09:50:34+00:00" "time": "2024-07-12T11:35:52+00:00"
}, },
{ {
"name": "consolidation/annotated-command", "name": "consolidation/annotated-command",
@ -2577,26 +2577,26 @@
}, },
{ {
"name": "drupal/restui", "name": "drupal/restui",
"version": "1.21.0", "version": "1.22.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.drupalcode.org/project/restui.git", "url": "https://git.drupalcode.org/project/restui.git",
"reference": "8.x-1.21" "reference": "8.x-1.22"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://ftp.drupal.org/files/projects/restui-8.x-1.21.zip", "url": "https://ftp.drupal.org/files/projects/restui-8.x-1.22.zip",
"reference": "8.x-1.21", "reference": "8.x-1.22",
"shasum": "2a67dc2c1953dced0bddaff25e5c60784ee0178c" "shasum": "7c9fb14c574f8a4090b77b1bcbc5be141409a383"
}, },
"require": { "require": {
"drupal/core": "^8.7.7 || ^9 || ^10" "drupal/core": "^9.5 || ^10 || ^11"
}, },
"type": "drupal-module", "type": "drupal-module",
"extra": { "extra": {
"drupal": { "drupal": {
"version": "8.x-1.21", "version": "8.x-1.22",
"datestamp": "1659086914", "datestamp": "1721134189",
"security-coverage": { "security-coverage": {
"status": "covered", "status": "covered",
"message": "Covered by Drupal's security advisory policy" "message": "Covered by Drupal's security advisory policy"
@ -2621,8 +2621,12 @@
"homepage": "https://www.drupal.org/user/682736" "homepage": "https://www.drupal.org/user/682736"
}, },
{ {
"name": "klausi", "name": "kamkejj",
"homepage": "https://www.drupal.org/user/262198" "homepage": "https://www.drupal.org/user/81043"
},
{
"name": "vipin.mittal18",
"homepage": "https://www.drupal.org/user/319716"
} }
], ],
"description": "Provides a user interface to manage REST resources.", "description": "Provides a user interface to manage REST resources.",
@ -3215,22 +3219,22 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "7.8.1", "version": "7.8.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104" "reference": "f4152d9eb85c445fe1f992001d1748e8bec070d2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4152d9eb85c445fe1f992001d1748e8bec070d2",
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "reference": "f4152d9eb85c445fe1f992001d1748e8bec070d2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"guzzlehttp/promises": "^1.5.3 || ^2.0.1", "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
"guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "guzzlehttp/psr7": "^1.9.1 || ^2.6.3",
"php": "^7.2.5 || ^8.0", "php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0" "symfony/deprecation-contracts": "^2.2 || ^3.0"
@ -3241,9 +3245,9 @@
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*", "ext-curl": "*",
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1", "php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.36 || ^9.6.15", "phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0" "psr/log": "^1.1 || ^2.0 || ^3.0"
}, },
"suggest": { "suggest": {
@ -3321,7 +3325,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/guzzle/issues", "issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.8.1" "source": "https://github.com/guzzle/guzzle/tree/7.8.2"
}, },
"funding": [ "funding": [
{ {
@ -3337,20 +3341,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-03T20:35:24+00:00" "time": "2024-07-18T11:12:18+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "2.0.2", "version": "2.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3358,7 +3362,7 @@
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.36 || ^9.6.15" "phpunit/phpunit": "^8.5.39 || ^9.6.20"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -3404,7 +3408,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/promises/issues", "issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.2" "source": "https://github.com/guzzle/promises/tree/2.0.3"
}, },
"funding": [ "funding": [
{ {
@ -3420,20 +3424,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-03T20:19:20+00:00" "time": "2024-07-18T10:29:17+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.6.2", "version": "2.6.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" "reference": "6de29867b18790c0d2c846af4c13a24cc3ad56f3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", "url": "https://api.github.com/repos/guzzle/psr7/zipball/6de29867b18790c0d2c846af4c13a24cc3ad56f3",
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "reference": "6de29867b18790c0d2c846af4c13a24cc3ad56f3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3448,8 +3452,8 @@
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "^0.9", "http-interop/http-factory-tests": "0.9.0",
"phpunit/phpunit": "^8.5.36 || ^9.6.15" "phpunit/phpunit": "^8.5.39 || ^9.6.20"
}, },
"suggest": { "suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@ -3520,7 +3524,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.6.2" "source": "https://github.com/guzzle/psr7/tree/2.6.3"
}, },
"funding": [ "funding": [
{ {
@ -3536,7 +3540,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-03T20:05:35+00:00" "time": "2024-07-18T09:59:12+00:00"
}, },
{ {
"name": "league/container", "name": "league/container",
@ -3689,16 +3693,16 @@
}, },
{ {
"name": "mck89/peast", "name": "mck89/peast",
"version": "v1.16.2", "version": "v1.16.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mck89/peast.git", "url": "https://github.com/mck89/peast.git",
"reference": "2791b08ffcc1862fe18eef85675da3aa58c406fe" "reference": "645ec21b650bc2aced18285c85f220d22afc1430"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mck89/peast/zipball/2791b08ffcc1862fe18eef85675da3aa58c406fe", "url": "https://api.github.com/repos/mck89/peast/zipball/645ec21b650bc2aced18285c85f220d22afc1430",
"reference": "2791b08ffcc1862fe18eef85675da3aa58c406fe", "reference": "645ec21b650bc2aced18285c85f220d22afc1430",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3711,7 +3715,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.16.2-dev" "dev-master": "1.16.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -3732,9 +3736,9 @@
"description": "Peast is PHP library that generates AST for JavaScript code", "description": "Peast is PHP library that generates AST for JavaScript code",
"support": { "support": {
"issues": "https://github.com/mck89/peast/issues", "issues": "https://github.com/mck89/peast/issues",
"source": "https://github.com/mck89/peast/tree/v1.16.2" "source": "https://github.com/mck89/peast/tree/v1.16.3"
}, },
"time": "2024-03-05T09:16:03+00:00" "time": "2024-07-23T14:00:32+00:00"
}, },
{ {
"name": "mkalkbrenner/php-htmldiff-advanced", "name": "mkalkbrenner/php-htmldiff-advanced",

View File

@ -0,0 +1,20 @@
uuid: 9576d52b-0e7a-482d-b817-5f50440b7b1f
langcode: sl
status: true
dependencies:
module:
- yufu_admin
theme:
- gin
id: gin_frontendlink
theme: gin
region: breadcrumb
weight: 0
provider: null
plugin: yufu_admin_frontend_link
settings:
id: yufu_admin_frontend_link
label: 'Frontend link'
label_display: '0'
provider: yufu_admin
visibility: { }

View File

@ -0,0 +1,20 @@
uuid: d841654b-cd40-4ec1-827b-ec710f8dbc8f
langcode: sl
status: true
dependencies:
module:
- yufu_admin
theme:
- olivero
id: olivero_frontendlink
theme: olivero
region: secondary_menu
weight: 0
provider: null
plugin: yufu_admin_frontend_link
settings:
id: yufu_admin_frontend_link
label: 'Frontend link'
label_display: '0'
provider: yufu_admin
visibility: { }

View File

@ -6,5 +6,5 @@ _core:
default_config_hash: zglzjmYxi0G0ag9MZ02y0LSJOdpWRwJxyP_OvFojFyo default_config_hash: zglzjmYxi0G0ag9MZ02y0LSJOdpWRwJxyP_OvFojFyo
id: basic id: basic
label: 'Basic block' label: 'Basic block'
revision: 0 revision: false
description: 'A basic block contains a title and a body.' description: 'A basic block contains a title and a body.'

View File

@ -5,6 +5,7 @@ dependencies:
config: config:
- field.field.node.page.body - field.field.node.page.body
- field.field.node.page.field_media - field.field.node.page.field_media
- field.field.node.page.field_strojni_prevod
- node.type.page - node.type.page
module: module:
- content_moderation - content_moderation
@ -20,7 +21,7 @@ mode: default
content: content:
body: body:
type: text_textarea_with_summary type: text_textarea_with_summary
weight: 31 weight: 9
region: content region: content
settings: settings:
rows: 9 rows: 9
@ -30,73 +31,80 @@ content:
third_party_settings: { } third_party_settings: { }
created: created:
type: datetime_timestamp type: datetime_timestamp
weight: 10 weight: 4
region: content region: content
settings: { } settings: { }
third_party_settings: { } third_party_settings: { }
field_media: field_media:
type: media_library_widget type: media_library_widget
weight: 5 weight: 3
region: content region: content
settings: settings:
media_types: { } media_types: { }
third_party_settings: { } third_party_settings: { }
field_strojni_prevod:
type: boolean_checkbox
weight: 12
region: content
settings:
display_label: true
third_party_settings: { }
langcode: langcode:
type: language_select type: language_select
weight: 2 weight: 1
region: content region: content
settings: settings:
include_locked: true include_locked: true
third_party_settings: { } third_party_settings: { }
moderation_state: moderation_state:
type: moderation_state_default type: moderation_state_default
weight: 100 weight: 10
region: content region: content
settings: { } settings: { }
third_party_settings: { } third_party_settings: { }
path: path:
type: path type: path
weight: 30 weight: 8
region: content region: content
settings: { } settings: { }
third_party_settings: { } third_party_settings: { }
promote: promote:
type: boolean_checkbox type: boolean_checkbox
weight: 15 weight: 6
region: content region: content
settings: settings:
display_label: true display_label: true
third_party_settings: { } third_party_settings: { }
status: status:
type: boolean_checkbox type: boolean_checkbox
weight: 120 weight: 11
region: content region: content
settings: settings:
display_label: true display_label: true
third_party_settings: { } third_party_settings: { }
sticky: sticky:
type: boolean_checkbox type: boolean_checkbox
weight: 16 weight: 7
region: content region: content
settings: settings:
display_label: true display_label: true
third_party_settings: { } third_party_settings: { }
title: title:
type: string_textfield type: string_textfield
weight: -5 weight: 0
region: content region: content
settings: settings:
size: 60 size: 60
placeholder: '' placeholder: ''
third_party_settings: { } third_party_settings: { }
translation: translation:
weight: 10 weight: 5
region: content region: content
settings: { } settings: { }
third_party_settings: { } third_party_settings: { }
uid: uid:
type: entity_reference_autocomplete type: entity_reference_autocomplete
weight: 5 weight: 2
region: content region: content
settings: settings:
match_operator: CONTAINS match_operator: CONTAINS

View File

@ -5,6 +5,7 @@ dependencies:
config: config:
- field.field.node.page.body - field.field.node.page.body
- field.field.node.page.field_media - field.field.node.page.field_media
- field.field.node.page.field_strojni_prevod
- node.type.page - node.type.page
module: module:
- text - text
@ -32,6 +33,16 @@ content:
third_party_settings: { } third_party_settings: { }
weight: 0 weight: 0
region: content region: content
field_strojni_prevod:
type: boolean
label: above
settings:
format: default
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 104
region: content
links: links:
settings: { } settings: { }
third_party_settings: { } third_party_settings: { }

View File

@ -6,6 +6,7 @@ dependencies:
- core.entity_view_mode.node.teaser - core.entity_view_mode.node.teaser
- field.field.node.page.body - field.field.node.page.body
- field.field.node.page.field_media - field.field.node.page.field_media
- field.field.node.page.field_strojni_prevod
- node.type.page - node.type.page
module: module:
- text - text
@ -30,4 +31,5 @@ content:
region: content region: content
hidden: hidden:
field_media: true field_media: true
field_strojni_prevod: true
langcode: true langcode: true

View File

@ -0,0 +1,23 @@
uuid: 2958b0de-fe09-4c7b-b5e4-a92d0ee61fb3
langcode: sl
status: true
dependencies:
config:
- field.storage.node.field_strojni_prevod
- node.type.page
id: node.page.field_strojni_prevod
field_name: field_strojni_prevod
entity_type: node
bundle: page
label: 'Strojni prevod?'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: Da
off_label: Ne
field_type: boolean

View File

@ -1 +0,0 @@
label: 'Indeks pretraživanja'

View File

@ -1 +0,0 @@
label: Mamac

View File

@ -1 +0,0 @@
label: 'Stranica taksonomijskog pojma'

View File

@ -2,7 +2,7 @@ label: 'Custom block library'
description: 'Find and manage custom blocks.' description: 'Find and manage custom blocks.'
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: 'Custom block library' title: 'Custom block library'
fields: fields:
@ -14,7 +14,6 @@ display:
label: Operacije label: Operacije
exposed_form: exposed_form:
options: options:
submit_button: Primjeni
reset_button_label: Ponastavi reset_button_label: Ponastavi
exposed_sorts_label: 'Rasporedi po' exposed_sorts_label: 'Rasporedi po'
sort_asc_label: Naraščajoče sort_asc_label: Naraščajoče
@ -27,7 +26,6 @@ display:
expose: expose:
label: 'Opis bloka' label: 'Opis bloka'
page_1: page_1:
display_title: Stranica
display_options: display_options:
menu: menu:
title: 'Custom block library' title: 'Custom block library'

View File

@ -1,7 +1,7 @@
label: Komentari label: Komentari
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: Komentari title: Komentari
fields: fields:

View File

@ -1,7 +1,7 @@
label: 'Posljednji komentari' label: 'Posljednji komentari'
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: 'Posljednji komentari' title: 'Posljednji komentari'
empty: empty:

View File

@ -1,7 +1,7 @@
label: Mediji label: Mediji
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: Mediji title: Mediji
fields: fields:
@ -12,6 +12,7 @@ display:
uid: uid:
label: Avtor label: Avtor
status: status:
label: Status
settings: settings:
format_custom_true: Objavljeno format_custom_true: Objavljeno
changed: changed:

View File

@ -1,6 +1,6 @@
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: Mediji title: Mediji
fields: fields:
@ -26,7 +26,6 @@ display:
expose: expose:
label: Jezik label: Jezik
page: page:
display_title: Stranica
display_options: display_options:
fields: fields:
media_bulk_form: media_bulk_form:
@ -38,10 +37,6 @@ display:
widget: widget:
display_title: Widget display_title: Widget
display_options: display_options:
arguments:
bundle:
exception:
title: Svi
filters: filters:
name: name:
expose: expose:
@ -60,10 +55,6 @@ display:
label: Avtor label: Avtor
changed: changed:
label: Posodobljeno label: Posodobljeno
arguments:
bundle:
exception:
title: Svi
filters: filters:
name: name:
expose: expose:

View File

@ -1,12 +1,14 @@
label: 'Moderirane vsebine' label: 'Moderirane vsebine'
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
title: 'Moderirane vsebine' title: 'Moderirane vsebine'
fields: fields:
title: title:
label: Naslov label: Naslov
type:
label: 'Content type'
name: name:
label: Avtor label: Avtor
changed: changed:
@ -24,6 +26,9 @@ display:
title: title:
expose: expose:
label: Naslov label: Naslov
type:
expose:
label: 'Content type'
langcode: langcode:
expose: expose:
label: Jezik label: Jezik

View File

@ -1,18 +1,11 @@
label: 'Pojam taksonomije' label: 'Pojam taksonomije'
display: display:
default: default:
display_title: Zadano display_title: Privzeto
display_options: display_options:
exposed_form: exposed_form:
options: options:
submit_button: Primjeni
reset_button_label: Ponastavi reset_button_label: Ponastavi
exposed_sorts_label: 'Rasporedi po' exposed_sorts_label: 'Rasporedi po'
sort_asc_label: Naraščajoče sort_asc_label: Naraščajoče
sort_desc_label: Padajoče sort_desc_label: Padajoče
arguments:
tid:
exception:
title: Svi
page_1:
display_title: Stranica

View File

@ -7,7 +7,7 @@ _core:
name: Article name: Article
type: article type: article
description: 'Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.' description: 'Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.'
help: '' help: null
new_revision: true new_revision: true
preview_mode: 1 preview_mode: 1
display_submitted: true display_submitted: true

View File

@ -12,7 +12,7 @@ third_party_settings:
name: Koncept name: Koncept
type: concept type: concept
description: 'Osnovni element manifesta' description: 'Osnovni element manifesta'
help: '' help: null
new_revision: true new_revision: true
preview_mode: 1 preview_mode: 1
display_submitted: true display_submitted: true

View File

@ -7,7 +7,7 @@ _core:
name: 'Basic page' name: 'Basic page'
type: page type: page
description: "Use <em>basic pages</em> for your static content, such as an 'About us' page." description: "Use <em>basic pages</em> for your static content, such as an 'About us' page."
help: '' help: null
new_revision: true new_revision: true
preview_mode: 1 preview_mode: 1
display_submitted: false display_submitted: false

View File

@ -3,4 +3,4 @@ _core:
threshold: threshold:
requirements_warning: 172800 requirements_warning: 172800
requirements_error: 1209600 requirements_error: 1209600
logging: 1 logging: true

View File

@ -1,10 +1,10 @@
_core: _core:
default_config_hash: t7clj3mzmOGrXX0HuCH5usf0vEqRtnMTBFVBIEmZ5pc default_config_hash: t7clj3mzmOGrXX0HuCH5usf0vEqRtnMTBFVBIEmZ5pc
first_day: 0 first_day: 1
country: country:
default: '' default: null
timezone: timezone:
default: UTC default: Europe/Ljubljana
user: user:
configurable: true configurable: true
default: 0 default: 0

View File

@ -8,3 +8,4 @@ name: Tags
vid: tags vid: tags
description: 'Use tags to group articles on similar topics into categories.' description: 'Use tags to group articles on similar topics into categories.'
weight: 0 weight: 0
new_revision: false

View File

@ -273,6 +273,7 @@ display:
type: mini type: mini
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 50 items_per_page: 50
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -533,6 +533,7 @@ display:
type: full type: full
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 50 items_per_page: 50
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -19,7 +19,7 @@ base_field: nid
display: display:
default: default:
id: default id: default
display_title: Zadano display_title: Privzeto
display_plugin: default display_plugin: default
position: 0 position: 0
display_options: display_options:
@ -427,6 +427,7 @@ display:
pager: pager:
type: full type: full
options: options:
pagination_heading_level: h4
items_per_page: 50 items_per_page: 50
tags: tags:
next: 'Next ' next: 'Next '

View File

@ -522,6 +522,7 @@ display:
type: full type: full
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 50 items_per_page: 50
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -139,6 +139,7 @@ display:
type: mini type: mini
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 24 items_per_page: 24
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -418,6 +418,7 @@ display:
type: full type: full
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 50 items_per_page: 50
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -29,6 +29,7 @@ display:
type: mini type: mini
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 10 items_per_page: 10
total_pages: 0 total_pages: 0
id: 0 id: 0

View File

@ -90,6 +90,72 @@ display:
multi_type: separator multi_type: separator
separator: ', ' separator: ', '
field_api_classes: false field_api_classes: false
vid:
id: vid
table: node_field_revision
field: vid
relationship: nid
group_type: group
admin_label: ''
entity_type: node
entity_field: vid
plugin_id: field
label: 'ID stare različice'
exclude: true
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: number_integer
settings:
thousand_separator: ''
prefix_suffix: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
vid_1: vid_1:
id: vid_1 id: vid_1
table: node_field_revision table: node_field_revision
@ -156,72 +222,6 @@ display:
multi_type: separator multi_type: separator
separator: ', ' separator: ', '
field_api_classes: false field_api_classes: false
vid:
id: vid
table: node_field_revision
field: vid
relationship: nid
group_type: group
admin_label: ''
entity_type: node
entity_field: vid
plugin_id: field
label: 'Latest Revision ID'
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: number_integer
settings:
thousand_separator: ''
prefix_suffix: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
title: title:
id: title id: title
table: node_field_revision table: node_field_revision
@ -287,6 +287,72 @@ display:
multi_type: separator multi_type: separator
separator: ', ' separator: ', '
field_api_classes: false field_api_classes: false
langcode:
id: langcode
table: node_field_revision
field: langcode
relationship: nid
group_type: group
admin_label: ''
entity_type: node
entity_field: langcode
plugin_id: field_language
label: Jezik
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: language
settings:
link_to_entity: 0
native_language: 0
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: 0
moderation_state: moderation_state:
id: moderation_state id: moderation_state
table: node_field_revision table: node_field_revision
@ -496,6 +562,7 @@ display:
type: mini type: mini
options: options:
offset: 0 offset: 0
pagination_heading_level: h4
items_per_page: 20 items_per_page: 20
total_pages: null total_pages: null
id: 0 id: 0

View File

@ -0,0 +1,259 @@
uuid: 251e836d-f4e6-4f56-b284-0dad8b4c002c
langcode: sl
status: true
dependencies:
config:
- node.type.concept
module:
- node
- user
id: zadnje_spremembe_2
label: 'Zadnje spremembe 2'
module: views
description: ''
tag: ''
base_table: node_field_revision
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
title: 'Zadnje spremembe 2'
fields:
changed:
id: changed
table: node_field_revision
field: changed
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: changed
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
make_link: false
absolute: false
word_boundary: false
ellipsis: false
strip_tags: false
trim: false
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: timestamp
settings:
date_format: medium
custom_date_format: ''
timezone: ''
tooltip:
date_format: ''
custom_date_format: ''
time_diff:
enabled: false
future_format: '@interval hence'
past_format: '@interval ago'
granularity: 2
refresh: 60
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
title:
id: title
table: node_field_revision
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
make_link: false
absolute: false
word_boundary: false
ellipsis: false
strip_tags: false
trim: false
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: false
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next:
previous:
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Ponastavi
exposed_sorts_label: 'Rasporedi po'
expose_sort_order: true
sort_asc_label: Naraščajoče
sort_desc_label: Padajoče
access:
type: perm
options:
perm: 'view all revisions'
cache:
type: tag
options: { }
empty: { }
sorts:
changed:
id: changed
table: node_field_revision
field: changed
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: changed
plugin_id: date
order: DESC
expose:
label: ''
field_identifier: ''
exposed: false
granularity: second
arguments: { }
filters:
status:
id: status
table: node_field_revision
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
relationship: nid
entity_type: node
entity_field: type
plugin_id: bundle
value:
concept: concept
style:
type: default
row:
type: fields
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships:
nid:
id: nid
table: node_field_revision
field: nid
relationship: none
group_type: group
admin_label: 'Get the actual content from a content revision.'
entity_type: node
entity_field: nid
plugin_id: standard
required: true
header: { }
footer: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
- user.permissions
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 1
display_options:
display_extenders: { }
path: zadnje-spremembe-2
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
- user.permissions
tags: { }

View File

@ -1,25 +1,29 @@
<script setup="setup"> <script setup="setup">
import { ref } from 'vue' const nastavitveStore = useNastavitveStore()
const { izbraniJezik } = storeToRefs(nastavitveStore)
const { etherpadUrl, etherpadPrefix } = useRuntimeConfig().public const { etherpadUrl, etherpadPrefix } = useRuntimeConfig().public
const jezikPada = computed(() => izbraniJezik.value)
const props = defineProps({ const props = defineProps({
revisionId: String, revisionId: String,
onLoad: Function onLoad: Function
}) })
const embed = ref(null)
onMounted(() => {
// Ce ni revisionId propertyja, se random generira.
const uuid = props.revisionId ? props.revisionId : crypto.randomUUID() const uuid = props.revisionId ? props.revisionId : crypto.randomUUID()
const padUrl = `${etherpadUrl}/p/${etherpadPrefix}${uuid}?showChat=false&showLineNumbers=false&toc=false` const padSrc = computed(
embed.value.src = padUrl () => `${etherpadUrl}/p/${etherpadPrefix}`
}) + `${izbraniJezik.value}-${uuid}`
+ '?showChat=false&showLineNumbers=false&toc=false'
)
</script> </script>
<template> <template>
<iframe ref="embed" class="etherpad-textarea" @load="props.onLoad" /> <iframe
class="etherpad-textarea"
@load="props.onLoad"
:src="padSrc" />
</template> </template>

View File

@ -11,19 +11,17 @@ const route = useRoute()
const { izbraniJezik } = storeToRefs(nastavitveStore) const { izbraniJezik } = storeToRefs(nastavitveStore)
const routeName = computed(() => route.name)
const props = defineProps({ const props = defineProps({
naslov: String pojemid: String
}) })
if (props.naslov && !(props.naslov in store.pojmi)) { if (props.pojemid && !(props.pojemid in store.pojmi)) {
await store.naloziPojme(izbraniJezik.value) await store.naloziPojme(izbraniJezik.value)
} }
watch(izbraniJezik, jezik => { const pojem = computed(() => store.pojmi[props.pojemid])
store.naloziPojme(jezik)
})
const pojem = computed(() => store.pojmi[props.naslov])
const revisionId = computed(() => pojem.value ? pojem.value.id : null) const revisionId = computed(() => pojem.value ? pojem.value.id : null)
const urejanje = ref(false) const urejanje = ref(false)
@ -34,7 +32,7 @@ const urediPojem = async () => {
// Ustvari pad s tekstom pojma, ce se ne obstaja // Ustvari pad s tekstom pojma, ce se ne obstaja
const tekstPojma = stripHtml(pojem.value.tekst).result const tekstPojma = stripHtml(pojem.value.tekst).result
const resp = await etherFetch('/createPad', { const resp = await etherFetch('/createPad', {
padID: revisionId.value, padID: izbraniJezik.value + '-' + revisionId.value,
text: tekstPojma text: tekstPojma
}) })
urejanje.value = true urejanje.value = true
@ -46,12 +44,12 @@ onMounted(() => {
navigateTo(localePath('manifest') + '#skrol') navigateTo(localePath('manifest') + '#skrol')
} }
// Link na editiranje pojma? Poskrolaj nanj + odpri editiranje // Poskrolaj na pojem
if (route.params.guid === revisionId.value) {
urejanje.value = true
} else {
// Sicer samo poskrolaj na pojem
poskrolaj(container.value.parentNode) poskrolaj(container.value.parentNode)
// Link na editiranje pojma? odpri editiranje
if (routeName.value.startsWith('pojem_uredi')) {
urediPojem()
} }
}) })
@ -68,7 +66,7 @@ onUpdated(() => {
<div v-if="!urejanje" class="gumb" @click="urediPojem">{{ $t('Uredi')}}</div> <div v-if="!urejanje" class="gumb" @click="urediPojem">{{ $t('Uredi')}}</div>
<div v-if="pojem" class="pojem"> <div v-if="pojem" class="pojem">
<h2> <h2>
{{ naslov }} {{ pojem.naslov }}
<StrojniPrevod v-if="pojem.strojni_prevod" /> <StrojniPrevod v-if="pojem.strojni_prevod" />
</h2> </h2>
<div class="tekst" v-html="pojem.tekst" /> <div class="tekst" v-html="pojem.tekst" />
@ -78,7 +76,7 @@ onUpdated(() => {
ref="obrazec" ref="obrazec"
:revisionId="revisionId" :revisionId="revisionId"
:pojem="pojem" :pojem="pojem"
:onZapri="() => { urejanje = false; store.naloziPojme() }" /> :onZapri="() => navigateTo(localePath({ name: 'pojem_poglej', params: { pojemid: revisionId }}))" />
</div> </div>
</section> </section>
</template> </template>

View File

@ -1,8 +1,13 @@
<script setup="setup"> <script setup="setup">
const { etherFetch } = useEtherpadApi() const { etherFetch } = useEtherpadApi()
const localePath = useLocalePath()
const { t } = useI18n()
const store = usePojmiStore() const store = usePojmiStore()
const nastavitveStore = useNastavitveStore()
const izbraniJezik = computed(() => nastavitveStore.izbraniJezik)
const props = defineProps({ const props = defineProps({
revisionId: String, revisionId: String,
@ -16,43 +21,36 @@ let email = ref('')
const oddajPredlog = async data => { const oddajPredlog = async data => {
// @TODO vsebina pada v tekst, testirat // @TODO vsebina pada v tekst, testirat
if (!naslov.value) { if (!naslov.value) {
alert("Manjka naslov pojma!") alert(t("Manjka naslov pojma!"))
return return
} }
const starNaslov = props.pojem.naslov try {
const resp = await etherFetch('/getText', { padID: `${izbraniJezik.value}-${props.revisionId}` })
const resp = await etherFetch('/getText', { padID: props.revisionId }) const stvarjenje = await store.ustvariPojem({
const stvarjenje = store.ustvariPojem({
title: naslov.value, title: naslov.value,
email: email.value, email: email.value,
text: resp.data.text, text: resp.data.text,
uuid: props.revisionId uuid: props.revisionId,
}) language: izbraniJezik.value
console.log(stvarjenje)
alert("sprememba predlagana!")
stvarjenje.then(() => {
console.log('NOV NASLOV?', starNaslov, props.pojem.naslov)
if (starNaslov !== props.pojem.naslov) {
navigateTo(localePath({ name: 'pojem_poglej', params: { naslov: props.pojem.naslov }}))
}
}) })
alert(t("Sprememba predlagana!"))
props.onZapri() props.onZapri()
} catch (error) {
alert(t('Napaka pri pošiljanju.'))
console.error(error)
}
} }
// @TODO tole raje v pojmi.vue oz nov_pojem.vue - page! // @TODO tole raje v pojmi.vue oz nov_pojem.vue - page!
const etherNalozen = ev => { const etherNalozen = ev => {
if (props.pojem.nov) { if (props.pojem.nov) {
navigateTo(localePath({ name: 'pojem_dodaj', params: { guid: revisionId }}), { navigateTo(localePath({ name: 'pojem_dodaj', params: { guid: revisionId }}))
replace: true
})
} else { } else {
navigateTo(localePath({ name: 'pojem_uredi', params: { navigateTo(localePath({ name: 'pojem_uredi', params: {
naslov: props.pojem.naslov, pojemid: props.revisionId
guid: props.revisionId }}))
}}), { replace: true })
} }
//window.location.hash = props.revisionId //window.location.hash = props.revisionId
} }

View File

@ -17,7 +17,10 @@ export const useUi = () => ({
setTimeout(() => { setTimeout(() => {
if (sekcija) { if (sekcija) {
const top = sekcija.getBoundingClientRect().top const top = sekcija.getBoundingClientRect().top
getScrollParent(sekcija).scrollTo({ top, behavior: 'smooth' }) const parent = getScrollParent(sekcija)
if (parent && top > 0) {
parent.scrollTo({ top })
}
} }
}, timeout) }, timeout)
} }

View File

@ -7,5 +7,9 @@
"Dodaj nov pojem": "Neues konzept hinzufügen", "Dodaj nov pojem": "Neues konzept hinzufügen",
"Uredi": "Bearbeiten", "Uredi": "Bearbeiten",
"Predlagaj": "Vorschlag", "Predlagaj": "Vorschlag",
"Zapri": "Schließen" "Zapri": "Schließen",
"Sprememba predlagana!": "Änderung vorgeschlagen!",
"Napaka pri pošiljanju.": "Fehler beim Senden von Vorschlägen.",
"Manjka naslov pojma!": "Der Titel des Konzepts fehlt!",
"strojni prevod": "übersetzung der maschine"
} }

View File

@ -6,6 +6,10 @@
"Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.": "Anyone can add content to the manifesto. You can suggest a new concept or edit, amend or adjust an existing one.", "Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.": "Anyone can add content to the manifesto. You can suggest a new concept or edit, amend or adjust an existing one.",
"Dodaj nov pojem": "Add new concept", "Dodaj nov pojem": "Add new concept",
"Uredi": "Edit", "Uredi": "Edit",
"Predlagaj": "Suggest", "Predlagaj": "Propose",
"Zapri": "Close" "Zapri": "Close",
"Sprememba predlagana!": "Change proposed!",
"Napaka pri pošiljanju.": "Error sending proposition.",
"Manjka naslov pojma!": "Concept title missing!",
"strojni prevod": "machine translation"
} }

View File

@ -7,5 +7,9 @@
"Dodaj nov pojem": "Añadir nuevo concepto", "Dodaj nov pojem": "Añadir nuevo concepto",
"Uredi": "Editar", "Uredi": "Editar",
"Predlagaj": "Sugerencias", "Predlagaj": "Sugerencias",
"Zapri": "Cerca" "Zapri": "Cerca",
"Sprememba predlagana!": "¡Cambio propuesto!",
"Napaka pri pošiljanju.": "Proposición de envío de errores.",
"Manjka naslov pojma!": "¡El título del concepto está desaparecido!",
"strojni prevod": "traducción automática"
} }

View File

@ -5,5 +5,8 @@
"Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.": "Svatko može pridonijeti sadržaju manifesta. Predložiti može novi koncept ili urediti, dopuniti ili revidirati postojeće koncepte.", "Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.": "Svatko može pridonijeti sadržaju manifesta. Predložiti može novi koncept ili urediti, dopuniti ili revidirati postojeće koncepte.",
"Dodaj nov pojem": "Dodajte novi koncept", "Dodaj nov pojem": "Dodajte novi koncept",
"Zapri": "Zatvori", "Zapri": "Zatvori",
"Predlagaj": "Predloži" "Predlagaj": "Predloži",
"Sprememba predlagana!": "Promjena predložena!",
"Napaka pri pošiljanju.": "Greška u slanju predloga.",
"Manjka naslov pojma!": "Naslov koncepta nedostaje!"
} }

View File

@ -27,15 +27,15 @@ export default defineNuxtConfig({
'pages:extend' (pages) { 'pages:extend' (pages) {
pages.push({ pages.push({
name: 'pojem_poglej', name: 'pojem_poglej',
path: '/manifest/:naslov', path: '/manifest/:pojemid',
file: '~/pages/manifest/pojem.vue' file: '~/pages/manifest/pojem.vue'
}, { }, {
name: 'pojem_uredi', name: 'pojem_uredi',
path: '/manifest/:naslov/uredi/:guid', path: '/manifest/:pojemid/uredi',
file: '~/pages/manifest/pojem.vue' file: '~/pages/manifest/pojem.vue'
}, { }, {
name: 'pojem_dodaj', name: 'pojem_dodaj',
path: '/manifest/dodaj/:guid', path: '/manifest/dodaj/:guid?',
file: '~/pages/manifest/dodaj.vue' file: '~/pages/manifest/dodaj.vue'
}) })
} }

View File

@ -4,7 +4,6 @@ const store = usePojmiStore()
const nastavitveStore = useNastavitveStore() const nastavitveStore = useNastavitveStore()
const { poskrolaj } = useUi() const { poskrolaj } = useUi()
const { getRandomUUID } = useCrypto()
const { izbraniJezik } = storeToRefs(nastavitveStore) const { izbraniJezik } = storeToRefs(nastavitveStore)
@ -22,17 +21,17 @@ onMounted(() => {
<template> <template>
<h3 class="navodila" ref="navodila">{{ $t('Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.') }}</h3> <h3 class="navodila" ref="navodila">{{ $t('Vsak lahko prispeva k vsebinam manifesta. Predlaga lahko nov pojem ali ureja, dopolni ali predela obstoječe.') }}</h3>
<NuxtLink class="gumb" :to="localePath({ name: 'pojem_dodaj', params: { guid: getRandomUUID() }})"> <NuxtLink class="gumb" :to="localePath({ name: 'pojem_dodaj' })">
{{ $t('Dodaj nov pojem') }} {{ $t('Dodaj nov pojem') }}
</NuxtLink> </NuxtLink>
<NuxtLink <NuxtLink
v-for="pojem in Object.keys(store.pojmi)" v-for="pojem in Object.values(store.pojmi)"
:naslov="pojem" :naslov="pojem.naslov"
:to="localePath({ name: 'pojem_poglej', params: { naslov: pojem }})" :to="localePath({ name: 'pojem_poglej', params: { pojemid: pojem.id }})"
class="okvir"> class="okvir">
<h2> <h2>
{{ pojem }} {{ pojem.naslov }}
<StrojniPrevod v-if="store.pojmi[pojem].strojni_prevod" /> <StrojniPrevod v-if="pojem.strojni_prevod" />
</h2> </h2>
</NuxtLink> </NuxtLink>
</template> </template>

View File

@ -1,13 +1,12 @@
<script setup="setup"> <script setup="setup">
const { etherpadApiUrl } = useEtherpadApi() const { pojemid } = useRoute().params
const { naslov } = useRoute().params
</script> </script>
<template> <template>
<div class="okvir"> <div class="okvir">
<Pojem :naslov="naslov" /> <Pojem :pojemid="pojemid" />
</div> </div>
<NuxtLink class="gumb" :to="localePath('manifest') + '#skrol'"> <NuxtLink class="gumb" :to="localePath('manifest') + '#skrol'">

View File

@ -13,7 +13,7 @@ export const usePojmiStore = defineStore('pojmi', {
tekst: s.body ? s.body.processed : '', tekst: s.body ? s.body.processed : '',
media: s.fieldMedia, media: s.fieldMedia,
strojni_prevod: s.fieldStrojniPrevod strojni_prevod: s.fieldStrojniPrevod
}), 'naslov') }), 'id')
}, },
async ustvariPojem(data) { async ustvariPojem(data) {
@ -28,7 +28,7 @@ export const usePojmiStore = defineStore('pojmi', {
body: JSON.stringify(data) body: JSON.stringify(data)
}) })
const resp = await req.json() return req
} }
} }
}) })

View File

@ -10,3 +10,11 @@ Obveščanje preko mailov, ko se spremeni revizija koncepta.
2. Kot urednik objavimo predlagane spremembe. 2. Kot urednik objavimo predlagane spremembe.
- Fino bi bilo imet pregled (view) predlaganih in še ne objavljenih sprememb. - Fino bi bilo imet pregled (view) predlaganih in še ne objavljenih sprememb.
3. Pogledamo v mailhog, če so se maili poslali. (ddev status) 3. Pogledamo v mailhog, če so se maili poslali. (ddev status)
## Frontend link
Definiramo ga v drupal nastavitvah za site:
```php
$settings['yufu_frontend'] = 'http://localhost:3000';
```

View File

@ -0,0 +1,61 @@
<?php
declare(strict_types=1);
namespace Drupal\yufu_admin\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Site\Settings;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides a frontend link block.
*
* @Block(
* id = "yufu_admin_frontend_link",
* admin_label = @Translation("Frontend link"),
* category = @Translation("yufu"),
* )
*/
final class FrontendLinkBlock extends BlockBase implements ContainerFactoryPluginInterface {
private $frontendLink = '';
/**
* Constructs the plugin instance.
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
private readonly Settings $settings,
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->frontendLink = $settings->get('yufu_frontend', FALSE);
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): self {
return new self(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('settings'),
);
}
/**
* {@inheritdoc}
*/
public function build(): array {
$build['content'] = [
'#markup' => "<a target=\"_blank\" href=\"{$this->frontendLink}\">{$this->t('Frontend')}</a>"
];
return $build;
}
}

View File

@ -13,3 +13,13 @@ Post request endpoint za dodajanje pojmov.
## Posiljanje emailov ## Posiljanje emailov
https://drupal.stackexchange.com/questions/235157/message-not-being-sent-in-the-body-of-the-mail https://drupal.stackexchange.com/questions/235157/message-not-being-sent-in-the-body-of-the-mail
## Libretranslate
Automatic translations come from a libretranslate instance.
You must configure two settings options, the URL and API key:
```php
$settings['yufu_libretranslate_url'] = 'http[s]://<libretranslate_url>';
$settings['yufu_libretranslate_apikey'] = '<apikey>';
```

View File

@ -111,14 +111,20 @@ class AddConcept extends ResourceBase {
if (!$this->currentUser->hasPermission('access content')) { if (!$this->currentUser->hasPermission('access content')) {
throw new AccessDeniedHttpException(); throw new AccessDeniedHttpException();
} }
// Fields: naslov, text, povezani pojmi, email // Fields: naslov, text, email, language
// Optional fields: language, related concept. // Optional fields: email, related_concept @TODO
if (empty($data['title']) || empty($data['text']) || empty($data['uuid'])) { if (empty($data['title']) || empty($data['text']) || empty($data['uuid']) || empty($data['language'])) {
throw new MissingDataException('Title, uuid or text missing.'); throw new MissingDataException('Title, uuid, text or language missing.');
} }
$uid = $this->getUserIdByEmail($data['email'] ?? null); $uid = $this->getUserIdByEmail($data['email'] ?? null);
if ($concept = $this->getConceptFromUuid($data['uuid'])) { if ($concept = $this->getConceptFromUuid($data['uuid'])) {
// Concept exists - create a new revision. // Concept exists - create a new revision.
if ($concept->hasTranslation($data['language'])) {
$concept = $concept->getTranslation($data['language']);
} else {
$concept = $concept->addTranslation($data['language']);
}
$concept->setNewRevision(TRUE); $concept->setNewRevision(TRUE);
$concept->setRevisionUserId($uid); $concept->setRevisionUserId($uid);
$concept->setRevisionCreationTime(\Drupal::time()->getRequestTime()); $concept->setRevisionCreationTime(\Drupal::time()->getRequestTime());
@ -133,14 +139,14 @@ class AddConcept extends ResourceBase {
$concept->setRevisionLogMessage('New revision by concept endpoint.'); $concept->setRevisionLogMessage('New revision by concept endpoint.');
$concept->set('moderation_state', 'draft'); $concept->set('moderation_state', 'draft');
$concept->set('status', 0); $concept->set('status', 0);
$concept->set('field_strojni_prevod', 0);
$concept->save(); $concept->save();
$this->logger->notice('New concept @title revision @revid created by uid @uid.', [ $this->logger->notice('New concept @title revision @revid created by uid @uid.', [
'@title' => $concept->getTitle(), '@title' => $concept->getTitle(),
'@revid' => $concept->getRevisionId(), '@revid' => $concept->getRevisionId(),
'@uid' => $uid, '@uid' => $uid,
]); ]);
} } else {
else {
// Concept does not exist - create a new node. // Concept does not exist - create a new node.
$concept = [ $concept = [
'type' => 'concept', 'type' => 'concept',
@ -149,6 +155,8 @@ class AddConcept extends ResourceBase {
'uuid' => $data['uuid'], 'uuid' => $data['uuid'],
'uid' => $uid, 'uid' => $uid,
'moderation_state' => 'draft', 'moderation_state' => 'draft',
'field_strojni_prevod' => 0,
'language' => $data['language']
]; ];
// @TODO Check if related concepts are set and add them to the concept. // @TODO Check if related concepts are set and add them to the concept.
// @TODO Check language and add set it on concept if exists. // @TODO Check language and add set it on concept if exists.

View File

@ -7,6 +7,7 @@ namespace Drupal\yufu_concept;
use Psr\Http\Client\ClientInterface; use Psr\Http\Client\ClientInterface;
use Drupal\Core\Site\Settings; use Drupal\Core\Site\Settings;
use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Exception\BadResponseException;
/** /**
* Ta service omogoča prevajanje preko libretranslate APIja. * Ta service omogoča prevajanje preko libretranslate APIja.
@ -31,6 +32,9 @@ final class Translate {
* Prevede $besedila iz $izvorniJezik v $ciljniJezik * Prevede $besedila iz $izvorniJezik v $ciljniJezik
*/ */
public function prevedi(array $besedila, $izvorniJezik, $ciljniJezik): ?array { public function prevedi(array $besedila, $izvorniJezik, $ciljniJezik): ?array {
$retry = 0;
while ($retry < 3) {
try {
$odziv = $this->request('translate', [ $odziv = $this->request('translate', [
'json' => [ 'json' => [
'q' => $besedila, 'q' => $besedila,
@ -44,6 +48,11 @@ final class Translate {
$json = json_decode($odziv->getBody()->getContents(), true); $json = json_decode($odziv->getBody()->getContents(), true);
return $json['translatedText']; return $json['translatedText'];
} }
$retry += 1;
} catch (BadResponseException $e) {
$retry += 1;
}
}
return null; return null;
} }

View File

@ -15,9 +15,10 @@ use Symfony\Component\HttpClient\HttpClient;
*/ */
function yufu_concept_node_presave(EntityInterface $entity) { function yufu_concept_node_presave(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') { if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
// Dodaj avtorja spremembe med urednike, če še ni
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity); $transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
if ($transition->id() == 'publish') { // Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
// Dodaj avtorja spremembe med urednike, če še ni
if ($user = $entity->uid->entity) { if ($user = $entity->uid->entity) {
if (!$user->status->value) { if (!$user->status->value) {
$user->set('status', 1); $user->set('status', 1);
@ -29,20 +30,44 @@ function yufu_concept_node_presave(EntityInterface $entity) {
} }
} }
// Dodaj oz. posodobi manjkajoce prevode (ampak samo ce ne gre za // Dodaj oz. posodobi manjkajoce prevode navadnih strani
// strojni prevod!)
function yufu_concept_node_insert(EntityInterface $entity) { function yufu_concept_node_insert(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'page') {
uskladi_prevode($entity); uskladi_prevode($entity);
} }
function yufu_concept_node_update(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
// Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
/* Posodobi strojne prevode */
uskladi_prevode($entity); uskladi_prevode($entity);
} }
}
}
function yufu_concept_node_update(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'page') {
uskladi_prevode($entity);
}
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
//var_dump($entity->status);die;
// Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
/* Posodobi strojne prevode */
//var_dump('uskladi prevode!');die;
uskladi_prevode($entity);
}
}
}
function prevedi_koncept(EntityInterface $entity, EntityInterface $prevod) { function prevedi_koncept(EntityInterface $entity, EntityInterface $prevod) {
$libretranslate = \Drupal::service('yufu_concept.translate'); $libretranslate = \Drupal::service('yufu_concept.translate');
$izvorniJezik = $entity->language()->getId(); $izvorniJezik = $entity->language()->getId();
$ciljniJezik = $prevod->language()->getId(); $ciljniJezik = $prevod->language()->getId();
//var_dump('prevajam koncept!', $izvorniJezik, $ciljniJezik);
// Hrvaščina ni podprta, zato jo zamenjamo s srbščino // Hrvaščina ni podprta, zato jo zamenjamo s srbščino
if ($izvorniJezik == 'hr') { if ($izvorniJezik == 'hr') {
@ -66,12 +91,14 @@ function prevedi_koncept(EntityInterface $entity, EntityInterface $prevod) {
$prevod->set('title', $naslov); $prevod->set('title', $naslov);
$prevod->set('body', $tekst); $prevod->set('body', $tekst);
$prevod->setNewRevision();
$prevod->moderation_state = 'published';
} }
function uskladi_prevode(EntityInterface $entity) { function uskladi_prevode(EntityInterface $entity) {
if ($entity instanceOf NodeInterface if ($entity instanceOf NodeInterface
&& $entity->bundle() == 'concept' && !$entity->field_strojni_prevod->value
&& !$entity->field_strojni_prevod->value) { && ($entity->bundle() == 'concept' || $entity->bundle() == 'page')) {
$vsiJeziki = array_keys(\Drupal::languageManager()->getLanguages()); $vsiJeziki = array_keys(\Drupal::languageManager()->getLanguages());
@ -86,6 +113,7 @@ function uskladi_prevode(EntityInterface $entity) {
$prevod = $entity->addTranslation($jezik, $entity->toArray()); $prevod = $entity->addTranslation($jezik, $entity->toArray());
prevedi_koncept($entity, $prevod); prevedi_koncept($entity, $prevod);
$prevod->set('field_strojni_prevod', true); $prevod->set('field_strojni_prevod', true);
$prevod->setNewRevision();
$prevod->save(); $prevod->save();
$ostaliJeziki = array_diff($ostaliJeziki, [$jezik]); $ostaliJeziki = array_diff($ostaliJeziki, [$jezik]);