mirror of
https://github.com/YGGverse/YGGtracker.git
synced 2026-04-01 01:25:39 +00:00
Compare commits
37 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d72bda1e71 | ||
|
|
085e6174d9 | ||
|
|
7bcc52fcae | ||
|
|
5a1ada42e7 | ||
|
|
ee9b7be6ac | ||
|
|
09811cd801 | ||
|
|
1281acea22 | ||
|
|
95addf0c48 | ||
|
|
e780c5b4b5 | ||
|
|
6c775f822c | ||
|
|
bff1962071 | ||
|
|
10181a04f1 | ||
|
|
7eb02d06cc | ||
|
|
2f4dbff90d | ||
|
|
3c6b1d6ab7 | ||
|
|
9d596de610 | ||
|
|
6603790aba | ||
|
|
fe608cff8f | ||
|
|
9814a56135 | ||
|
|
27e598fded | ||
|
|
f5d4c19eb9 | ||
|
|
9081acebb3 | ||
|
|
3b832c94bc | ||
|
|
110976c619 | ||
|
|
2afaf2f618 | ||
|
|
8aff756e30 | ||
|
|
7177cdb4fe | ||
|
|
3ce3dfe77b | ||
|
|
5523034307 | ||
|
|
e3503bc4bd | ||
|
|
002a41da87 | ||
|
|
deb35d5013 | ||
|
|
1ae5d324c2 | ||
|
|
5a0342a998 | ||
|
|
7a1fa12271 | ||
|
|
77616c3c8a | ||
|
|
b96ed08694 |
28 changed files with 918 additions and 457 deletions
4
.env
4
.env
|
|
@ -48,7 +48,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
|
||||||
# YGGtracker
|
# YGGtracker
|
||||||
|
|
||||||
# Application version, used for API and media cache
|
# Application version, used for API and media cache
|
||||||
APP_VERSION='2.5.0'
|
APP_VERSION=2.6.2
|
||||||
|
|
||||||
# Application name
|
# Application name
|
||||||
APP_NAME=YGGtracker
|
APP_NAME=YGGtracker
|
||||||
|
|
@ -88,7 +88,7 @@ APP_POSTERS=1
|
||||||
APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|http://[200:1e2f:e608:eb3a:2bf:1e62:87ba:e2f7]/announce|http://[316:c51a:62a3:8b9::5]/announce
|
APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|http://[200:1e2f:e608:eb3a:2bf:1e62:87ba:e2f7]/announce|http://[316:c51a:62a3:8b9::5]/announce
|
||||||
|
|
||||||
# List of crawlers where ignored in actions and activity features
|
# List of crawlers where ignored in actions and activity features
|
||||||
APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e
|
APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e|202:f2bc:f800:7cc4:c109:7857:5cae:6630|200:1554:e730:4030:605b:47be:6fb6:7b11
|
||||||
|
|
||||||
# Max torrent filesize for uploads (check upload_max_filesize in the php.ini)
|
# Max torrent filesize for uploads (check upload_max_filesize in the php.ini)
|
||||||
APP_TORRENT_FILE_SIZE_MAX=1024000
|
APP_TORRENT_FILE_SIZE_MAX=1024000
|
||||||
|
|
|
||||||
25
README.md
25
README.md
|
|
@ -1,22 +1,16 @@
|
||||||
# YGGtracker
|
# YGGtracker
|
||||||
|
|
||||||
[](https://crowdin.com/project/yggtracker)
|
> [!NOTE]
|
||||||
|
> Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern aggregation alternative written in Rust!
|
||||||
|
|
||||||
BitTorrent Network for Yggdrasil
|
A social-oriented BitTorrent catalog for the [Yggdrasil](https://github.com/yggdrasil-network) network, written in the Symfony framework.
|
||||||
|
|
||||||
YGGtracker is catalog, open tracker and social network with many features that allow to convert, filter and download any torrent in [Yggdrasil network](https://github.com/yggdrasil-network) by community.
|
YGGtracker is a manually operated catalog and social network that allows users to share their torrents in the local network. Engine uses IPv6 `0200::/7` addresses to identify users without registration.
|
||||||
|
|
||||||
Engine uses IPv6 `0200::/7` addresses to identify users without registration.
|
|
||||||
|
|
||||||
#### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase)
|
#### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### Instances
|
|
||||||
|
|
||||||
* `http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/`
|
|
||||||
+ `ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]:21/yggtracker/`
|
|
||||||
|
|
||||||
#### Installation
|
#### Installation
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -70,7 +64,7 @@ Custom settings could be provided in the `/.env.local` file by overwriting defau
|
||||||
|
|
||||||
#### Localization
|
#### Localization
|
||||||
|
|
||||||
Join community translations by [Crowdin](https://crowdin.com/project/yggtracker)
|
[](https://crowdin.com/project/yggtracker)
|
||||||
|
|
||||||
#### API
|
#### API
|
||||||
|
|
||||||
|
|
@ -85,15 +79,6 @@ git checkout main
|
||||||
git checkout -b my-pr-branch-name
|
git checkout -b my-pr-branch-name
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Donate to contributors
|
|
||||||
|
|
||||||
* @d47081:
|
|
||||||
|
|
||||||
+ 
|
|
||||||
+ [BTC](https://www.blockchain.com/explorer/addresses/btc/bc1qngdf2kwty6djjqpk0ynkpq9wmlrmtm7e0c534y) | [LTC](https://live.blockcypher.com/ltc/address/LUSiqzKsfB1vBLvpu515DZktG9ioKqLyj7) | [XMR](835gSR1Uvka19gnWPkU2pyRozZugRZSPHDuFL6YajaAqjEtMwSPr4jafM8idRuBWo7AWD3pwFQSYRMRW9XezqrK4BEXBgXE) | [ZEPH](ZEPHsADHXqnhfWhXrRcXnyBQMucE3NM7Ng5ZVB99XwA38PTnbjLKpCwcQVgoie8EJuWozKgBiTmDFW4iY7fNEgSEWyAy4dotqtX)
|
|
||||||
+ Support our server by order [Linux VPS](https://www.yourserver.se/portal/aff.php?aff=610)
|
|
||||||
+ Inspiration by [SomaFM Deep Space One](https://somafm.com/deepspaceone/)
|
|
||||||
|
|
||||||
#### License
|
#### License
|
||||||
|
|
||||||
* Engine sources [MIT License](https://github.com/YGGverse/YGGtracker/blob/main/LICENSE)
|
* Engine sources [MIT License](https://github.com/YGGverse/YGGtracker/blob/main/LICENSE)
|
||||||
|
|
|
||||||
785
composer.lock
generated
785
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -9,20 +9,156 @@ use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
use App\Service\UserService;
|
use App\Service\UserService;
|
||||||
|
use App\Service\TorrentService;
|
||||||
use App\Service\ActivityService;
|
use App\Service\ActivityService;
|
||||||
|
|
||||||
class SearchController extends AbstractController
|
class SearchController extends AbstractController
|
||||||
{
|
{
|
||||||
public function module(
|
public function module(
|
||||||
?string $query,
|
Request $request,
|
||||||
?string $type
|
UserService $userService,
|
||||||
|
TorrentService $torrentService,
|
||||||
|
ActivityService $activityService
|
||||||
): Response
|
): Response
|
||||||
{
|
{
|
||||||
|
// Defaults
|
||||||
|
$locales = [];
|
||||||
|
$categories = [];
|
||||||
|
$sensitive = [];
|
||||||
|
|
||||||
|
// Request
|
||||||
|
$query = $request->get('query') ? urldecode($request->get('query')) : '';
|
||||||
|
$filter = $request->get('filter') ? true : false;
|
||||||
|
|
||||||
|
// Extended search
|
||||||
|
if ($filter)
|
||||||
|
{
|
||||||
|
// Init user
|
||||||
|
$user = $this->initUser(
|
||||||
|
$request,
|
||||||
|
$userService,
|
||||||
|
$activityService
|
||||||
|
);
|
||||||
|
|
||||||
|
// Keywords
|
||||||
|
$keywords = explode(' ', $query);
|
||||||
|
|
||||||
|
// Locales
|
||||||
|
foreach (explode('|', $this->getParameter('app.locales')) as $locale)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($request->get('locales'))
|
||||||
|
{
|
||||||
|
$checked = in_array($locale, (array) $request->get('locales'));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$checked = in_array($locale, $user->getLocales());
|
||||||
|
}
|
||||||
|
|
||||||
|
$locales[] =
|
||||||
|
[
|
||||||
|
'value' => $locale,
|
||||||
|
'checked' => $checked,
|
||||||
|
'total' => $torrentService->findTorrentsTotal(
|
||||||
|
0,
|
||||||
|
$keywords,
|
||||||
|
[$locale],
|
||||||
|
$request->get('categories') ? $request->get('categories') : $user->getCategories(),
|
||||||
|
$request->get('sensitive') ? null : false,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Categories
|
||||||
|
foreach (explode('|', $this->getParameter('app.categories')) as $category)
|
||||||
|
{
|
||||||
|
if ($request->get('categories'))
|
||||||
|
{
|
||||||
|
$checked = in_array($category, (array) $request->get('categories'));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$checked = in_array($category, $user->getCategories());
|
||||||
|
}
|
||||||
|
|
||||||
|
$categories[] =
|
||||||
|
[
|
||||||
|
'value' => $category,
|
||||||
|
'checked' => $checked,
|
||||||
|
'total' => $torrentService->findTorrentsTotal(
|
||||||
|
0,
|
||||||
|
$keywords,
|
||||||
|
$request->get('locales') ? $request->get('locales') : $user->getLocales(),
|
||||||
|
[$category],
|
||||||
|
$request->get('sensitive') ? null : false,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sensitive
|
||||||
|
$sensitive =
|
||||||
|
[
|
||||||
|
'checked' => $request->get('sensitive'),
|
||||||
|
'total' => $torrentService->findTorrentsTotal(
|
||||||
|
0,
|
||||||
|
$keywords,
|
||||||
|
$request->get('locales') ? $request->get('locales') : $user->getLocales(),
|
||||||
|
$request->get('categories') ? $request->get('categories') : $user->getCategories(),
|
||||||
|
true,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
!$user->isModerator() ? true : null,
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return $this->render(
|
return $this->render(
|
||||||
'default/search/module.html.twig',
|
'default/search/module.html.twig',
|
||||||
[
|
[
|
||||||
'query' => $query ? urldecode($query) : '',
|
'query' => $query,
|
||||||
|
'filter' => $filter,
|
||||||
|
'sensitive' => $sensitive,
|
||||||
|
'locales' => $locales,
|
||||||
|
'categories' => $categories,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function initUser(
|
||||||
|
Request $request,
|
||||||
|
UserService $userService,
|
||||||
|
ActivityService $activityService
|
||||||
|
): ?\App\Entity\User
|
||||||
|
{
|
||||||
|
// Init user
|
||||||
|
if (!$user = $userService->findUserByAddress($request->getClientIp()))
|
||||||
|
{
|
||||||
|
$user = $userService->addUser(
|
||||||
|
$request->getClientIp(),
|
||||||
|
time(),
|
||||||
|
$this->getParameter('app.locale'),
|
||||||
|
explode('|', $this->getParameter('app.locales')),
|
||||||
|
$activityService->getEventCodes(),
|
||||||
|
$this->getParameter('app.theme'),
|
||||||
|
$this->getParameter('app.sensitive'),
|
||||||
|
$this->getParameter('app.yggdrasil'),
|
||||||
|
$this->getParameter('app.posters'),
|
||||||
|
$this->getParameter('app.approved')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add user join event
|
||||||
|
$activityService->addEventUserAdd(
|
||||||
|
$user->getId(),
|
||||||
|
time()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -57,10 +57,13 @@ class TorrentController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sensitive filter
|
// Sensitive filter
|
||||||
if (!$user->isModerator() && $user->isSensitive())
|
// @TODO add blur effect or sensitive notice instead of 404 on direct request #37
|
||||||
|
/*
|
||||||
|
if (!$user->isModerator() && $user->isSensitive() && $torrent->isSensitive())
|
||||||
{
|
{
|
||||||
throw $this->createNotFoundException();
|
throw $this->createNotFoundException();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// Access filter
|
// Access filter
|
||||||
if (!$user->isModerator() && $user->getId() != $torrent->getUserId() &&
|
if (!$user->isModerator() && $user->getId() != $torrent->getUserId() &&
|
||||||
|
|
@ -204,7 +207,9 @@ class TorrentController extends AbstractController
|
||||||
'private' => $file->isPrivate(),
|
'private' => $file->isPrivate(),
|
||||||
'source' => $file->getSource(),
|
'source' => $file->getSource(),
|
||||||
'comment' => $file->getComment(),
|
'comment' => $file->getComment(),
|
||||||
'tree' => $file->getFileTree(),
|
'tree' => $file->getFileTree(
|
||||||
|
\Rhilip\Bencode\TorrentFile::FILETREE_SORT_NATURAL // #34 @TODO cyrillic
|
||||||
|
),
|
||||||
//'trackers' => $file->getAnnounceList(),
|
//'trackers' => $file->getAnnounceList(),
|
||||||
'hash' =>
|
'hash' =>
|
||||||
[
|
[
|
||||||
|
|
@ -260,22 +265,22 @@ class TorrentController extends AbstractController
|
||||||
|
|
||||||
// Get total torrents
|
// Get total torrents
|
||||||
$total = $torrentService->findTorrentsTotal(
|
$total = $torrentService->findTorrentsTotal(
|
||||||
$user->getId(),
|
$request->get('filter') ? 0 : $user->getId(),
|
||||||
$query,
|
$query,
|
||||||
$user->getLocales(),
|
$request->get('filter') ? (array) $request->get('locales') : $user->getLocales(),
|
||||||
$user->getCategories(),
|
$request->get('filter') ? (array) $request->get('categories') : $user->getCategories(),
|
||||||
$user->isSensitive() ? false : null,
|
$request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null),
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
);
|
);
|
||||||
|
|
||||||
$torrents = [];
|
$torrents = [];
|
||||||
foreach ($torrentService->findTorrents(
|
foreach ($torrentService->findTorrents(
|
||||||
$user->getId(),
|
$request->get('filter') ? 0 : $user->getId(),
|
||||||
$query,
|
$query,
|
||||||
$user->getLocales(),
|
$request->get('filter') ? (array) $request->get('locales') : $user->getLocales(),
|
||||||
$user->getCategories(),
|
$request->get('filter') ? (array) $request->get('categories') : $user->getCategories(),
|
||||||
$user->isSensitive() ? false : null,
|
$request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null),
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
$this->getParameter('app.pagination'),
|
$this->getParameter('app.pagination'),
|
||||||
|
|
@ -627,11 +632,11 @@ class TorrentController extends AbstractController
|
||||||
|
|
||||||
// Get total torrents
|
// Get total torrents
|
||||||
$total = $torrentService->findTorrentsTotal(
|
$total = $torrentService->findTorrentsTotal(
|
||||||
$user->getId(),
|
$request->get('filter') ? 0 : $user->getId(),
|
||||||
$query,
|
$query,
|
||||||
$user->getLocales(),
|
$request->get('filter') ? (array) $request->get('locales') : $user->getLocales(),
|
||||||
$user->getCategories(),
|
$request->get('filter') ? (array) $request->get('categories') : $user->getCategories(),
|
||||||
$user->isSensitive() ? false : null,
|
$request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null),
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
);
|
);
|
||||||
|
|
@ -639,11 +644,11 @@ class TorrentController extends AbstractController
|
||||||
// Create torrents list
|
// Create torrents list
|
||||||
$torrents = [];
|
$torrents = [];
|
||||||
foreach ($torrentService->findTorrents(
|
foreach ($torrentService->findTorrents(
|
||||||
$user->getId(),
|
$request->get('filter') ? 0 : $user->getId(),
|
||||||
$query,
|
$query,
|
||||||
$user->getLocales(),
|
$request->get('filter') ? (array) $request->get('locales') : $user->getLocales(),
|
||||||
$user->getCategories(),
|
$request->get('filter') ? (array) $request->get('categories') : $user->getCategories(),
|
||||||
$user->isSensitive() ? false : null,
|
$request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null),
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
!$user->isModerator() ? true : null,
|
!$user->isModerator() ? true : null,
|
||||||
$this->getParameter('app.pagination'),
|
$this->getParameter('app.pagination'),
|
||||||
|
|
|
||||||
|
|
@ -323,6 +323,11 @@ class TorrentService
|
||||||
{
|
{
|
||||||
$contributors = [];
|
$contributors = [];
|
||||||
|
|
||||||
|
foreach ($this->findTorrentCategoriesByTorrentId($torrent->getId()) as $torrentCategory)
|
||||||
|
{
|
||||||
|
$contributors[] = $torrentCategory->getUserId();
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($this->findTorrentLocalesByTorrentId($torrent->getId()) as $torrentLocale)
|
foreach ($this->findTorrentLocalesByTorrentId($torrent->getId()) as $torrentLocale)
|
||||||
{
|
{
|
||||||
$contributors[] = $torrentLocale->getUserId();
|
$contributors[] = $torrentLocale->getUserId();
|
||||||
|
|
@ -333,6 +338,11 @@ class TorrentService
|
||||||
$contributors[] = $torrentSensitive->getUserId();
|
$contributors[] = $torrentSensitive->getUserId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($this->findTorrentPosterByTorrentId($torrent->getId()) as $torrentPoster)
|
||||||
|
{
|
||||||
|
$contributors[] = $torrentPoster->getUserId();
|
||||||
|
}
|
||||||
|
|
||||||
$contributors[] = $torrent->getUserId();
|
$contributors[] = $torrent->getUserId();
|
||||||
|
|
||||||
return array_unique($contributors);
|
return array_unique($contributors);
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ class AppExtension extends AbstractExtension
|
||||||
): string
|
): string
|
||||||
{
|
{
|
||||||
return preg_replace(
|
return preg_replace(
|
||||||
'~(https?://(?:www\.)?[^\s]+)~i',
|
'~(https?://(?:www\.)?[^\(\s\)]+)~i',
|
||||||
'[$1]($1)',
|
'[$1]($1)',
|
||||||
$text
|
$text
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -16,18 +16,19 @@
|
||||||
<header>
|
<header>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row margin-y-16-px text-center">
|
<div class="row margin-y-16-px text-center">
|
||||||
<a class="logo display-inline-block margin-b-8-px" href="{{ path('torrent_recent') }}">
|
<a class="logo display-inline-block{#32 margin-b-8-px #}" href="{{ path('torrent_recent') }}">
|
||||||
<span>YGG</span>tracker
|
<span>YGG</span>tracker
|
||||||
</a>
|
</a>
|
||||||
|
{#32
|
||||||
<div class="font-size-10-px text-center text-color-night">
|
<div class="font-size-10-px text-center text-color-night">
|
||||||
{{ '<a href="%s">Upload</a> any torrent - download with Yggdrasil' | trans | format(path('torrent_submit')) | raw }}
|
{{ '<a href="%s">Upload</a> any torrent - download with Yggdrasil' | trans | format(path('torrent_submit')) | raw }}
|
||||||
</div>
|
</div>
|
||||||
|
#}
|
||||||
{% block header_search %}
|
{% block header_search %}
|
||||||
{{ render(controller(
|
{{ render(controller(
|
||||||
'App\\Controller\\SearchController::module',
|
'App\\Controller\\SearchController::module',
|
||||||
{
|
{
|
||||||
query : app.request.get('query'),
|
request: app.request
|
||||||
type : app.request.get('type')
|
|
||||||
}
|
}
|
||||||
)) }}
|
)) }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,69 @@
|
||||||
<form class="margin-t-16-px" name="search" method="get" action="{{ path('torrent_search') }}">
|
<form class="margin-t-16-px" name="search" method="get" action="{{ path('torrent_search') }}">
|
||||||
<input class="min-width-200-px" type="text" name="query" value="{{ query }}" placeholder="{{ 'Keyword, file, hash...' | trans }}" />
|
<input class="min-width-200-px" type="text" name="query" value="{{ query }}" placeholder="{{ 'Keyword, file, hash...' | trans }}" />
|
||||||
<input {% if query %}class="button-green"{% endif %} type="submit" value="{{ 'Search' | trans }}" />
|
<input {% if query %}class="button-green"{% endif %} type="submit" value="{{ 'Search' | trans }}" />
|
||||||
|
{% if filter %}
|
||||||
|
<input type="hidden" name="filter" value="true" />
|
||||||
|
<div class="text-left">
|
||||||
|
<div class="margin-t-16-px margin-b-4-px padding-x-4-px text-right">
|
||||||
|
{{ 'Locales' | trans }}
|
||||||
|
</div>
|
||||||
|
<div class="padding-t-16-px padding-b-8-px padding-x-24-px border-top-default">
|
||||||
|
{% for locale in locales | sort %}
|
||||||
|
{#{% if locale.total %}#}
|
||||||
|
<div class="margin-t-4-px margin-b-8-px margin-r-8-px display-inline-block min-width-120-px">
|
||||||
|
{% if locale.checked %}
|
||||||
|
<input name="locales[]" id="{{ locale.value }}" type="checkbox" value="{{ locale.value }}" checked="checked" />
|
||||||
|
{% else %}
|
||||||
|
<input name="locales[]" id="{{ locale.value }}" type="checkbox" value="{{ locale.value }}" />
|
||||||
|
{% endif %}
|
||||||
|
<label class="margin-x-4-px" for="{{ locale.value }}">
|
||||||
|
{{ locale.value | locale_name(locale.value) | u.title }}
|
||||||
|
<span class="text-color-night">
|
||||||
|
({{ locale.total }})
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
{#{% endif %}#}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="margin-b-4-px padding-x-4-px text-right">
|
||||||
|
{{ 'Categories' | trans }}
|
||||||
|
</div>
|
||||||
|
<div class="padding-t-16-px padding-b-8-px padding-x-24-px border-top-default">
|
||||||
|
{% for category in categories | sort %}
|
||||||
|
{#{% if category.total %}#}
|
||||||
|
<div class="margin-t-4-px margin-b-8-px margin-r-8-px display-inline-block min-width-120-px">
|
||||||
|
{% if category.checked %}
|
||||||
|
<input name="categories[]" id="{{ category.value }}" type="checkbox" value="{{ category.value }}" checked="checked" />
|
||||||
|
{% else %}
|
||||||
|
<input name="categories[]" id="{{ category.value }}" type="checkbox" value="{{ category.value }}" />
|
||||||
|
{% endif %}
|
||||||
|
<label class="margin-x-4-px" for="{{ category.value }}">
|
||||||
|
{{ category.value | trans_category | u.title }}
|
||||||
|
<span class="text-color-night">
|
||||||
|
({{ category.total }})
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
{#{% endif %}#}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="margin-b-4-px padding-x-4-px text-right">
|
||||||
|
{{ 'other' | trans | u.title }}
|
||||||
|
</div>
|
||||||
|
<div class="padding-t-16-px padding-b-8-px padding-x-24-px border-top-default">
|
||||||
|
{% if sensitive.checked %}
|
||||||
|
<input name="sensitive" id="sensitive" type="checkbox" value="true" checked="checked" />
|
||||||
|
{% else %}
|
||||||
|
<input name="sensitive" id="sensitive" type="checkbox" value="true" />
|
||||||
|
{% endif %}
|
||||||
|
<label class="margin-x-4-px" for="sensitive">
|
||||||
|
{{ 'Sensitive' | trans }}
|
||||||
|
<span class="text-color-night">
|
||||||
|
({{ sensitive.total }})
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
|
|
@ -96,14 +96,14 @@
|
||||||
<td class="padding-t-16-px">
|
<td class="padding-t-16-px">
|
||||||
{% if torrent.status %}
|
{% if torrent.status %}
|
||||||
{{ 'Yes' | trans }}
|
{{ 'Yes' | trans }}
|
||||||
<a class="float-right" href="{{ path('torrent_status_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
<a rel="nofollow" class="float-right" href="{{ path('torrent_status_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10H5zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/>
|
<path d="M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10H5zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ 'No' | trans }}
|
{{ 'No' | trans }}
|
||||||
<a class="float-right text-color-red" href="{{ path('torrent_status_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
<a rel="nofollow" class="float-right text-color-red" href="{{ path('torrent_status_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M11 4a4 4 0 0 1 0 8H8a4.992 4.992 0 0 0 2-4 4.992 4.992 0 0 0-2-4h3zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5z"/>
|
<path d="M11 4a4 4 0 0 1 0 8H8a4.992 4.992 0 0 0 2-4 4.992 4.992 0 0 0-2-4h3zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -119,14 +119,14 @@
|
||||||
<td>
|
<td>
|
||||||
{% if torrent.approved %}
|
{% if torrent.approved %}
|
||||||
{{ 'Yes' | trans }}
|
{{ 'Yes' | trans }}
|
||||||
<a class="float-right" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
<a rel="nofollow" class="float-right" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10H5zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/>
|
<path d="M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10H5zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ 'No' | trans }}
|
{{ 'No' | trans }}
|
||||||
<a class="float-right text-color-red" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
<a rel="nofollow" class="float-right text-color-red" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M11 4a4 4 0 0 1 0 8H8a4.992 4.992 0 0 0 2-4 4.992 4.992 0 0 0-2-4h3zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5z"/>
|
<path d="M11 4a4 4 0 0 1 0 8H8a4.992 4.992 0 0 0 2-4 4.992 4.992 0 0 0-2-4h3zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -220,13 +220,26 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ 'Private' | trans }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if file.private %}
|
||||||
|
{{ 'Yes' | trans }}
|
||||||
|
{% else %}
|
||||||
|
{{ 'No' | trans }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
{% if file.source %}
|
{% if file.source %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ 'Source' | trans }}
|
{{ 'Source' | trans }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ file.source | url_to_markdown | markdown_to_html }}
|
{# strip all tags then apply whitelist markdown filters to prevent ping from remote #}
|
||||||
|
{{ file.source | trim | striptags | url_to_markdown | markdown_to_html | nl2br }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -236,7 +249,8 @@
|
||||||
{{ 'Software' | trans }}
|
{{ 'Software' | trans }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ file.software }}
|
{# strip all tags then apply whitelist markdown filters to prevent ping from remote #}
|
||||||
|
{{ file.software | trim | striptags | url_to_markdown | markdown_to_html | nl2br }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -246,7 +260,8 @@
|
||||||
{{ 'Comment' | trans }}
|
{{ 'Comment' | trans }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ file.comment | url_to_markdown | markdown_to_html }}
|
{# strip all tags then apply whitelist markdown filters to prevent ping from remote #}
|
||||||
|
{{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -334,7 +349,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_locales_edit', { torrentId : torrent.id }) }}" title="{{'Edit'|trans }}">
|
<a rel="nofollow" class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_locales_edit', { torrentId : torrent.id }) }}" title="{{ 'Edit' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -351,7 +366,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_categories_edit', { torrentId : torrent.id }) }}" title="{{'Edit'|trans }}">
|
<a rel="nofollow" class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_categories_edit', { torrentId : torrent.id }) }}" title="{{ 'Edit' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -368,7 +383,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_sensitive_edit', { torrentId : torrent.id }) }}" title="{{'Edit'|trans }}">
|
<a rel="nofollow" class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_sensitive_edit', { torrentId : torrent.id }) }}" title="{{ 'Edit' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -384,7 +399,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_poster_edit', { torrentId : torrent.id }) }}" title="{{'Edit'|trans }}">
|
<a rel="nofollow" class="margin-r-4-px{#opacity-0 parent-hover-opacity-09#}" href="{{ path('torrent_poster_edit', { torrentId : torrent.id }) }}" title="{{ 'Edit' | trans }}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,33 @@
|
||||||
{% if query %}
|
{% if query %}
|
||||||
<h2>{{ 'Search results' | trans }}</h2>
|
<h2>{{ 'Search results' | trans }}</h2>
|
||||||
<sub>
|
<sub>
|
||||||
|
{% if app.request.get('filter') %}
|
||||||
|
<a class="margin-l-4-px" rel="nofollow" href="{{ path('torrent_search', { query : query | url_encode(true) }) }}" title="{{ 'Hide filter' | trans }}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-filter-square-fill" viewBox="0 0 16 16">
|
||||||
|
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm.5 5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1 0-1zM4 8.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm2 3a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
<a class="text-color-night margin-x-4-px" href="{{ path('rss_torrents_recent', { query : query | url_encode(true),
|
||||||
|
locales : app.request.get('locales'),
|
||||||
|
categories : app.request.get('categories'),
|
||||||
|
sensitive : app.request.get('sensitive'),
|
||||||
|
filter : app.request.get('filter') }) }}" title="RSS">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
|
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm1.5 2.5c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1 0-2zm0 4a6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1 0-2zm.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="text-color-night margin-l-4-px" rel="nofollow" href="{{ path('torrent_search', { query : query | url_encode(true), filter : 'true' }) }}" title="{{ 'Show filter' | trans }}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-filter-square-fill" viewBox="0 0 16 16">
|
||||||
|
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm.5 5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1 0-1zM4 8.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm2 3a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
<a class="text-color-night margin-x-4-px" href="{{ path('rss_torrents_recent', { query : query | url_encode(true) }) }}" title="RSS">
|
<a class="text-color-night margin-x-4-px" href="{{ path('rss_torrents_recent', { query : query | url_encode(true) }) }}" title="RSS">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||||
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm1.5 2.5c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1 0-2zm0 4a6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1 0-2zm.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
|
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm1.5 2.5c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1 0-2zm0 4a6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1 0-2zm.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
</sub>
|
</sub>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h2>{{ 'Recent uploads' | trans }}</h2>
|
<h2>{{ 'Recent uploads' | trans }}</h2>
|
||||||
|
|
@ -36,7 +58,8 @@
|
||||||
{% if torrent.scrape.leechers > 0 and torrent.scrape.seeders == 0 %}
|
{% if torrent.scrape.leechers > 0 and torrent.scrape.seeders == 0 %}
|
||||||
<a href="{{ path('torrent_file_wanted', { torrentId : torrent.id }) }}"
|
<a href="{{ path('torrent_file_wanted', { torrentId : torrent.id }) }}"
|
||||||
class="label label-green font-size-10-px position-relative display-inline-block"
|
class="label label-green font-size-10-px position-relative display-inline-block"
|
||||||
title="{{ 'Active leechers waiting for seeders' | trans }}">
|
title="{{ 'Active leechers waiting for seeders' | trans }}"
|
||||||
|
rel="nofollow">
|
||||||
{{ 'wanted' | trans }}
|
{{ 'wanted' | trans }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -80,7 +103,11 @@
|
||||||
{% if torrent.keywords %}
|
{% if torrent.keywords %}
|
||||||
<div class="margin-b-16-px">
|
<div class="margin-b-16-px">
|
||||||
{% for keyword, quantity in torrent.keywords %}
|
{% for keyword, quantity in torrent.keywords %}
|
||||||
<a href="{{ path('torrent_search', { query : keyword | url_encode(true) }) }}">
|
<a href="{{ path('torrent_search', { query : keyword | url_encode(true),
|
||||||
|
locales : app.request.get('locales'),
|
||||||
|
categories : app.request.get('categories'),
|
||||||
|
sensitive : app.request.get('sensitive'),
|
||||||
|
filter : app.request.get('filter') }) }}">
|
||||||
#{{ keyword }}
|
#{{ keyword }}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
@ -169,17 +196,31 @@
|
||||||
{% if query %}
|
{% if query %}
|
||||||
{% if pagination.page > 1 %}
|
{% if pagination.page > 1 %}
|
||||||
{% if pagination.page == 2 %}
|
{% if pagination.page == 2 %}
|
||||||
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true) | raw }) }}">
|
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true),
|
||||||
|
locales : app.request.get('locales'),
|
||||||
|
categories : app.request.get('categories'),
|
||||||
|
sensitive : app.request.get('sensitive'),
|
||||||
|
filter : app.request.get('filter') }) }}">
|
||||||
{{ 'Back' | trans | lower }}
|
{{ 'Back' | trans | lower }}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true), page : pagination.page - 1 }) }}">
|
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true),
|
||||||
|
page : pagination.page - 1,
|
||||||
|
locales : app.request.get('locales'),
|
||||||
|
categories : app.request.get('categories'),
|
||||||
|
sensitive : app.request.get('sensitive'),
|
||||||
|
filter : app.request.get('filter') }) }}">
|
||||||
{{ 'Back' | trans | lower }}
|
{{ 'Back' | trans | lower }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pagination.page < pagination.pages %}
|
{% if pagination.page < pagination.pages %}
|
||||||
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true), page : pagination.page + 1 }) }}">
|
<a rel="nofollow" class="button margin-l-8-px" href="{{ path('torrent_search', { query : query | url_encode(true),
|
||||||
|
page : pagination.page + 1,
|
||||||
|
locales : app.request.get('locales'),
|
||||||
|
categories : app.request.get('categories'),
|
||||||
|
sensitive : app.request.get('sensitive'),
|
||||||
|
filter : app.request.get('filter') }) }}">
|
||||||
{{ 'Next' | trans | lower }}
|
{{ 'Next' | trans | lower }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -87,9 +87,9 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="padding-t-16-px padding-b-8-px">
|
<td class="padding-t-16-px padding-b-8-px">
|
||||||
{% for locale in locales %}
|
{% for locale in locales | sort %}
|
||||||
<div class="margin-t-4-px margin-b-8-px margin-r-8-px display-inline-block min-width-120-px">
|
<div class="margin-t-4-px margin-b-8-px margin-r-8-px display-inline-block min-width-120-px">
|
||||||
{% if locale in user.locales | sort %}
|
{% if locale in user.locales %}
|
||||||
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" checked="checked" />
|
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" checked="checked" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" />
|
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" />
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>other</target>
|
<target>other</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Hide filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Show filter</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Private</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>другое</target>
|
<target>другое</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Скрыть фильтр</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Показать фильтр</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Приватный</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,18 @@
|
||||||
<source>other</source>
|
<source>other</source>
|
||||||
<target>інше</target>
|
<target>інше</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="v7fLnQX" resname="Hide filter">
|
||||||
|
<source>Hide filter</source>
|
||||||
|
<target>Приховати фільтр</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="45aF7iu" resname="Show filter">
|
||||||
|
<source>Show filter</source>
|
||||||
|
<target>Показати фільтр</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="xj62cgx" resname="Private">
|
||||||
|
<source>Private</source>
|
||||||
|
<target>Приватний</target>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue