Search: Add search with parameters (#880)

* Search with parameters

* Small improvements

* Small improvements no.2

Поиск теперь нормально выглядит на других темах
При поиске по группам отображается количество участников там
Костыль с пропуском постов возвращён но немного изменён
Добавлен костыль к комментариям чтобы не показывались комменты с удалённых постов и не было бага как в вепуровке
Добавлены ключи в советском и имперском языке для моих прошлых пуллов (ну и этого конечно)

* Fix debilny oshibky

Убрал лишние ключи локализации, исправил панель поеска и исправил hometown

* fiksy bagiv

* ok

* ok 2

* ok

* rrrrrrrrrrrrrrrr

Добавил параметры в vkapi users.search(), пофиксил проверку коммерции, сузил параметры ещё больше и добавил анимацию выдвижения поиска чтобы красиво было
This commit is contained in:
lalka2018 2023-06-10 18:54:02 +03:00 committed by GitHub
parent 8fb1be6be6
commit f9f6270da0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 1473 additions and 82 deletions

View file

@ -150,7 +150,10 @@ final class Users extends VKAPIRequestHandler
break; break;
case "interests": case "interests":
$response[$i]->interests = $usr->getInterests(); $response[$i]->interests = $usr->getInterests();
break; break;
case "rating":
$response[$i]->rating = $usr->getRating();
break;
} }
} }
@ -188,19 +191,94 @@ final class Users extends VKAPIRequestHandler
]; ];
} }
function search(string $q, string $fields = "", int $offset = 0, int $count = 100) function search(string $q,
string $fields = "",
int $offset = 0,
int $count = 100,
string $city = "",
string $hometown = "",
int $sex = 2,
int $status = 0, # это про marital status
bool $online = false,
# дальше идут параметры которых нету в vkapi но есть на сайте
string $profileStatus = "", # а это уже нормальный статус
int $sort = 0,
int $before = 0,
int $politViews = 0,
int $after = 0,
string $interests = "",
string $fav_music = "",
string $fav_films = "",
string $fav_shows = "",
string $fav_books = "",
string $fav_quotes = ""
)
{ {
$users = new UsersRepo; $users = new UsersRepo;
$sortg = "id ASC";
$nfilds = $fields;
switch($sort) {
case 0:
$sortg = "id DESC";
break;
case 1:
$sortg = "id ASC";
break;
case 2:
$sortg = "first_name DESC";
break;
case 3:
$sortg = "first_name ASC";
break;
case 4:
$sortg = "rating DESC";
if(!str_contains($nfilds, "rating")) {
$nfilds .= "rating";
}
break;
case 5:
$sortg = "rating DESC";
if(!str_contains($nfilds, "rating")) {
$nfilds .= "rating";
}
break;
}
$array = []; $array = [];
$find = $users->find($q);
$parameters = [
"city" => !empty($city) ? $city : NULL,
"hometown" => !empty($hometown) ? $hometown : NULL,
"gender" => $sex < 2 ? $sex : NULL,
"maritalstatus" => (bool)$status ? $status : NULL,
"politViews" => (bool)$politViews ? $politViews : NULL,
"is_online" => $online ? 1 : NULL,
"status" => !empty($profileStatus) ? $profileStatus : NULL,
"before" => $before != 0 ? $before : NULL,
"after" => $after != 0 ? $after : NULL,
"interests" => !empty($interests) ? $interests : NULL,
"fav_music" => !empty($fav_music) ? $fav_music : NULL,
"fav_films" => !empty($fav_films) ? $fav_films : NULL,
"fav_shows" => !empty($fav_shows) ? $fav_shows : NULL,
"fav_books" => !empty($fav_books) ? $fav_books : NULL,
"fav_quotes" => !empty($fav_quotes) ? $fav_quotes : NULL,
];
$find = $users->find($q, $parameters, $sortg);
foreach ($find as $user) foreach ($find as $user)
$array[] = $user->getId(); $array[] = $user->getId();
return (object) [ return (object) [
"count" => $find->size(), "count" => $find->size(),
"items" => $this->get(implode(',', $array), $fields, $offset, $count) "items" => $this->get(implode(',', $array), $nfilds, $offset, $count)
]; ];
} }
} }

View file

@ -66,4 +66,12 @@ class Applications
{ {
return sizeof($this->appRels->where("user", $user->getId())); return sizeof($this->appRels->where("user", $user->getId()));
} }
function find(string $query, array $pars = [], string $sort = "id"): Util\EntityStream
{
$query = "%$query%";
$result = $this->apps->where("CONCAT_WS(' ', name, description) LIKE ?", $query)->where("enabled", 1);
return new Util\EntityStream("Application", $result->order("$sort"));
}
} }

View file

@ -43,12 +43,12 @@ class Clubs
return $this->toClub($this->clubs->get($id)); return $this->toClub($this->clubs->get($id));
} }
function find(string $query, int $page = 1, ?int $perPage = NULL): \Traversable function find(string $query, array $pars = [], string $sort = "id DESC", int $page = 1, ?int $perPage = NULL): \Traversable
{ {
$query = "%$query%"; $query = "%$query%";
$result = $this->clubs->where("name LIKE ? OR about LIKE ?", $query, $query); $result = $this->clubs->where("name LIKE ? OR about LIKE ?", $query, $query);
return new Util\EntityStream("Club", $result); return new Util\EntityStream("Club", $result->order($sort));
} }
function getCount(): int function getCount(): int

View file

@ -59,4 +59,35 @@ class Comments
"deleted" => false, "deleted" => false,
])); ]));
} }
function find(string $query = "", array $pars = [], string $sort = "id"): Util\EntityStream
{
$query = "%$query%";
$notNullParams = [];
foreach($pars as $paramName => $paramValue)
if($paramName != "before" && $paramName != "after")
$paramValue != NULL ? $notNullParams+=["$paramName" => "%$paramValue%"] : NULL;
else
$paramValue != NULL ? $notNullParams+=["$paramName" => "$paramValue"] : NULL;
$result = $this->comments->where("content LIKE ?", $query)->where("deleted", 0);
$nnparamsCount = sizeof($notNullParams);
if($nnparamsCount > 0) {
foreach($notNullParams as $paramName => $paramValue) {
switch($paramName) {
case "before":
$result->where("created < ?", $paramValue);
break;
case "after":
$result->where("created > ?", $paramValue);
break;
}
}
}
return new Util\EntityStream("Comment", $result->order("$sort"));
}
} }

View file

@ -99,7 +99,39 @@ class Posts
return NULL; return NULL;
} }
function find(string $query = "", array $pars = [], string $sort = "id"): Util\EntityStream
{
$query = "%$query%";
$notNullParams = [];
foreach($pars as $paramName => $paramValue)
if($paramName != "before" && $paramName != "after")
$paramValue != NULL ? $notNullParams+=["$paramName" => "%$paramValue%"] : NULL;
else
$paramValue != NULL ? $notNullParams+=["$paramName" => "$paramValue"] : NULL;
$result = $this->posts->where("content LIKE ?", $query)->where("deleted", 0);
$nnparamsCount = sizeof($notNullParams);
if($nnparamsCount > 0) {
foreach($notNullParams as $paramName => $paramValue) {
switch($paramName) {
case "before":
$result->where("created < ?", $paramValue);
break;
case "after":
$result->where("created > ?", $paramValue);
break;
}
}
}
return new Util\EntityStream("Post", $result->order("$sort"));
}
function getPostCountOnUserWall(int $user): int function getPostCountOnUserWall(int $user): int
{ {
return sizeof($this->posts->where(["wall" => $user, "deleted" => 0])); return sizeof($this->posts->where(["wall" => $user, "deleted" => 0]));

View file

@ -49,12 +49,88 @@ class Users
return $this->toUser($this->users->where("user", $user->getId())->fetch()); return $this->toUser($this->users->where("user", $user->getId())->fetch());
} }
function find(string $query): Util\EntityStream function find(string $query, array $pars = [], string $sort = "id DESC"): Util\EntityStream
{ {
$query = "%$query%"; $query = "%$query%";
$result = $this->users->where("CONCAT_WS(' ', first_name, last_name, pseudo, shortcode) LIKE ?", $query)->where("deleted", 0); $result = $this->users->where("CONCAT_WS(' ', first_name, last_name, pseudo, shortcode) LIKE ?", $query)->where("deleted", 0);
return new Util\EntityStream("User", $result); $notNullParams = [];
$nnparamsCount = 0;
foreach($pars as $paramName => $paramValue)
if($paramName != "before" && $paramName != "after" && $paramName != "gender" && $paramName != "maritalstatus" && $paramName != "politViews")
$paramValue != NULL ? $notNullParams += ["$paramName" => "%$paramValue%"] : NULL;
else
$paramValue != NULL ? $notNullParams += ["$paramName" => "$paramValue"] : NULL;
$nnparamsCount = sizeof($notNullParams);
if($nnparamsCount > 0) {
foreach($notNullParams as $paramName => $paramValue) {
switch($paramName) {
case "hometown":
$result->where("hometown LIKE ?", $paramValue);
break;
case "city":
$result->where("city LIKE ?", $paramValue);
break;
case "maritalstatus":
$result->where("marital_status ?", $paramValue);
break;
case "status":
$result->where("status LIKE ?", $paramValue);
break;
case "politViews":
$result->where("polit_views ?", $paramValue);
break;
case "email":
$result->where("email_contact LIKE ?", $paramValue);
break;
case "telegram":
$result->where("telegram LIKE ?", $paramValue);
break;
case "site":
$result->where("telegram LIKE ?", $paramValue);
break;
case "address":
$result->where("address LIKE ?", $paramValue);
break;
case "is_online":
$result->where("online >= ?", time() - 900);
break;
case "interests":
$result->where("interests LIKE ?", $paramValue);
break;
case "fav_mus":
$result->where("fav_music LIKE ?", $paramValue);
break;
case "fav_films":
$result->where("fav_films LIKE ?", $paramValue);
break;
case "fav_shows":
$result->where("fav_shows LIKE ?", $paramValue);
break;
case "fav_books":
$result->where("fav_books LIKE ?", $paramValue);
break;
case "fav_quote":
$result->where("fav_quote LIKE ?", $paramValue);
break;
case "before":
$result->where("UNIX_TIMESTAMP(since) < ?", $paramValue);
break;
case "after":
$result->where("UNIX_TIMESTAMP(since) > ?", $paramValue);
break;
case "gender":
$result->where("sex ?", $paramValue);
break;
}
}
}
return new Util\EntityStream("User", $result->order($sort));
} }
function getStatistics(): object function getStatistics(): object

View file

@ -45,4 +45,36 @@ class Videos
{ {
return sizeof($this->videos->where("owner", $user->getId())->where(["deleted" => 0, "unlisted" => 0])); return sizeof($this->videos->where("owner", $user->getId())->where(["deleted" => 0, "unlisted" => 0]));
} }
function find(string $query = "", array $pars = [], string $sort = "id"): Util\EntityStream
{
$query = "%$query%";
$notNullParams = [];
foreach($pars as $paramName => $paramValue)
if($paramName != "before" && $paramName != "after")
$paramValue != NULL ? $notNullParams+=["$paramName" => "%$paramValue%"] : NULL;
else
$paramValue != NULL ? $notNullParams+=["$paramName" => "$paramValue"] : NULL;
$result = $this->videos->where("name OR description LIKE ?", $query)->where("deleted", 0);
$nnparamsCount = sizeof($notNullParams);
if($nnparamsCount > 0) {
foreach($notNullParams as $paramName => $paramValue) {
switch($paramName) {
case "before":
$result->where("created < ?", $paramValue);
break;
case "after":
$result->where("created > ?", $paramValue);
break;
}
}
}
return new Util\EntityStream("Video", $result->order("$sort"));
}
} }

View file

@ -1,18 +1,28 @@
<?php declare(strict_types=1); <?php declare(strict_types=1);
namespace openvk\Web\Presenters; namespace openvk\Web\Presenters;
use openvk\Web\Models\Entities\{User, Club}; use openvk\Web\Models\Entities\{User, Club};
use openvk\Web\Models\Repositories\{Users, Clubs}; use openvk\Web\Models\Repositories\{Users, Clubs, Posts, Comments, Videos, Applications, Notes};
use Chandler\Database\DatabaseConnection; use Chandler\Database\DatabaseConnection;
final class SearchPresenter extends OpenVKPresenter final class SearchPresenter extends OpenVKPresenter
{ {
private $users; private $users;
private $clubs; private $clubs;
private $posts;
private $comments;
private $videos;
private $apps;
private $notes;
function __construct(Users $users, Clubs $clubs) function __construct(Users $users, Clubs $clubs)
{ {
$this->users = $users; $this->users = $users;
$this->clubs = $clubs; $this->clubs = $clubs;
$this->posts = new Posts;
$this->comments = new Comments;
$this->videos = new Videos;
$this->apps = new Applications;
$this->notes = new Notes;
parent::__construct(); parent::__construct();
} }
@ -21,6 +31,8 @@ final class SearchPresenter extends OpenVKPresenter
{ {
$query = $this->queryParam("query") ?? ""; $query = $this->queryParam("query") ?? "";
$type = $this->queryParam("type") ?? "users"; $type = $this->queryParam("type") ?? "users";
$sorter = $this->queryParam("sort") ?? "id";
$invert = $this->queryParam("invert") == 1 ? "ASC" : "DESC";
$page = (int) ($this->queryParam("p") ?? 1); $page = (int) ($this->queryParam("p") ?? 1);
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
@ -28,11 +40,58 @@ final class SearchPresenter extends OpenVKPresenter
$this->assertUserLoggedIn(); $this->assertUserLoggedIn();
# https://youtu.be/pSAWM5YuXx8 # https://youtu.be/pSAWM5YuXx8
$repos = [ "groups" => "clubs", "users" => "users" ]; $repos = [
"groups" => "clubs",
"users" => "users",
"posts" => "posts",
"comments" => "comments",
"videos" => "videos",
"audios" => "posts",
"apps" => "apps",
"notes" => "notes"
];
switch($sorter) {
default:
case "id":
$sort = "id " . $invert;
break;
case "name":
$sort = "first_name " . $invert;
break;
case "rating":
$sort = "rating " . $invert;
break;
}
$parameters = [
"type" => $this->queryParam("type"),
"city" => $this->queryParam("city") != "" ? $this->queryParam("city") : NULL,
"maritalstatus" => $this->queryParam("maritalstatus") != 0 ? $this->queryParam("maritalstatus") : NULL,
"with_photo" => $this->queryParam("with_photo"),
"status" => $this->queryParam("status") != "" ? $this->queryParam("status") : NULL,
"politViews" => $this->queryParam("politViews") != 0 ? $this->queryParam("politViews") : NULL,
"email" => $this->queryParam("email"),
"telegram" => $this->queryParam("telegram"),
"site" => $this->queryParam("site") != "" ? "https://".$this->queryParam("site") : NULL,
"address" => $this->queryParam("address"),
"is_online" => $this->queryParam("is_online") == 1 ? 1 : NULL,
"interests" => $this->queryParam("interests") != "" ? $this->queryParam("interests") : NULL,
"fav_mus" => $this->queryParam("fav_mus") != "" ? $this->queryParam("fav_mus") : NULL,
"fav_films" => $this->queryParam("fav_films") != "" ? $this->queryParam("fav_films") : NULL,
"fav_shows" => $this->queryParam("fav_shows") != "" ? $this->queryParam("fav_shows") : NULL,
"fav_books" => $this->queryParam("fav_books") != "" ? $this->queryParam("fav_books") : NULL,
"fav_quote" => $this->queryParam("fav_quote") != "" ? $this->queryParam("fav_quote") : NULL,
"hometown" => $this->queryParam("hometown") != "" ? $this->queryParam("hometown") : NULL,
"before" => $this->queryParam("datebefore") != "" ? strtotime($this->queryParam("datebefore")) : NULL,
"after" => $this->queryParam("dateafter") != "" ? strtotime($this->queryParam("dateafter")) : NULL,
"gender" => $this->queryParam("gender") != "" && $this->queryParam("gender") != 2 ? $this->queryParam("gender") : NULL
];
$repo = $repos[$type] or $this->throwError(400, "Bad Request", "Invalid search entity $type."); $repo = $repos[$type] or $this->throwError(400, "Bad Request", "Invalid search entity $type.");
$results = $this->{$repo}->find($query); $results = $this->{$repo}->find($query, $parameters, $sort);
$iterator = $results->page($page); $iterator = $results->page($page);
$count = $results->size(); $count = $results->size();

View file

@ -70,28 +70,60 @@
<a href="/logout?hash={urlencode($csrfToken)}">{_header_log_out}</a> <a href="/logout?hash={urlencode($csrfToken)}">{_header_log_out}</a>
</div> </div>
{else} {else}
<div class="link"> <div class="link dec">
<a href="/">{_header_home}</a> <a href="/">{_header_home}</a>
</div> </div>
<div class="link"> <div class="link dec">
<a href="/search?type=groups">{_header_groups}</a> <a href="/search?type=groups">{_header_groups}</a>
</div> </div>
<div class="link"> <div class="link dec">
<a href="/search">{_header_search}</a> <a href="/search">{_header_search}</a>
</div> </div>
<div class="link"> <div class="link dec">
<a href="/invite">{_header_invite}</a> <a href="/invite">{_header_invite}</a>
</div> </div>
<div class="link"> <div class="link dec">
<a href="/support">{_header_help} <b n:if="$ticketAnsweredCount > 0">({$ticketAnsweredCount})</b></a> <a href="/support">{_header_help} <b n:if="$ticketAnsweredCount > 0">({$ticketAnsweredCount})</b></a>
</div> </div>
<div class="link"> <div class="link dec">
<a href="/logout?hash={urlencode($csrfToken)}">{_header_log_out}</a> <a href="/logout?hash={urlencode($csrfToken)}">{_header_log_out}</a>
</div> </div>
<div class="link"> {var $atSearch = str_contains($_SERVER['REQUEST_URI'], "/search")}
<form action="/search" method="get"> <div id="srch" class="{if $atSearch}nodivider{else}link{/if}">
<input type="search" name="query" placeholder="{_header_search}" style="height: 20px;background: url('/assets/packages/static/openvk/img/search_icon.png') no-repeat 3px 4px; background-color: #fff; padding-left: 18px;width: 120px;" title="{_header_search} [Alt+Shift+F]" accesskey="f" />
</form> {if !$atSearch}
<form action="/search" method="get" id="searcher" style="position:relative;">
<input id="searchInput" onfocus="expandSearch()" onblur="decreaseSearch()" class="sr" type="search" name="query" placeholder="{_header_search}" style="height: 20px;background: url('/assets/packages/static/openvk/img/search_icon.png') no-repeat 3px 4px; background-color: #fff; padding-left: 18px;width: 120px;" title="{_header_search} [Alt+Shift+F]" accesskey="f" />
<select name="type" class="whatFind" style="display:none;top: 0px;">
<option value="users">{_s_by_people}</option>
<option value="groups">{_s_by_groups}</option>
<option value="posts">{_s_by_posts}</option>
<option value="comments">{_s_by_comments}</option>
<option value="videos">{_s_by_videos}</option>
<option value="apps">{_s_by_apps}</option>
</select>
</form>
{else}
<form action="/search" method="get" id="searcher" style="margin-top: -1px;position:relative;">
<input id="searchInput" value="{$_GET['query'] ?? ''}" type="search" class="sr" name="query" placeholder="{_header_search}" style="height: 20px; background-color: #fff; padding-left: 6px;width: 555px;" title="{_header_search} [Alt+Shift+F]" accesskey="f" />
<select name="type" class="whatFind">
<option value="users" {if str_contains($_SERVER['REQUEST_URI'], "type=users")}selected{/if}>{_s_by_people}</option>
<option value="groups" {if str_contains($_SERVER['REQUEST_URI'], "type=groups")}selected{/if}>{_s_by_groups}</option>
<option value="posts" {if str_contains($_SERVER['REQUEST_URI'], "type=posts")}selected{/if}>{_s_by_posts}</option>
<option value="comments" {if str_contains($_SERVER['REQUEST_URI'], "type=comments")}selected{/if}>{_s_by_comments}</option>
<option value="videos" {if str_contains($_SERVER['REQUEST_URI'], "type=videos")}selected{/if}>{_s_by_videos}</option>
<option value="apps" {if str_contains($_SERVER['REQUEST_URI'], "type=apps")}selected{/if}>{_s_by_apps}</option>
</select>
<button class="searchBtn"><span style="color:white;font-weight: 600;font-size:12px;">{_header_search}</span></button>
</form>
<script>
let els = document.querySelectorAll("div.dec")
for(const element of els)
{
element.style.display = "none"
}
</script>
{/if}
</div> </div>
{/if} {/if}
{else} {else}

View file

@ -1,11 +1,7 @@
{extends "../@listView.xml"} {extends "../@layout.xml"}
{block title} {block title}
{if $type === "users"} {tr("search_for_$type")}
{tr("search_for_people")}
{else}
{tr("search_for_groups")}
{/if}
{if $_GET['query']} {if $_GET['query']}
- {$_GET['query']} - {$_GET['query']}
{/if} {/if}
@ -13,41 +9,17 @@
{block header} {block header}
{=OPENVK_ROOT_CONF["openvk"]["appearance"]["name"]} » {=OPENVK_ROOT_CONF["openvk"]["appearance"]["name"]} »
{if $type === "users"} {tr("search_for_$type")}
{tr("search_for_people")}
{else}
{tr("search_for_groups")}
{/if}
{/block} {/block}
{* BEGIN ELEMENTS DESCRIPTION *} {* BEGIN ELEMENTS DESCRIPTION *}
{block tabs}
<div {if $type === "users"}id="activetabs"{/if} class="tab">
<a {if $type === "users"}id="act_tab_a"{/if} href="/search?type=users{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}">
{_users}
</a>
</div>
<div {if $type === "groups"}id="activetabs"{/if} class="tab">
<a {if $type === "groups"}id="act_tab_a"{/if} href="/search?type=groups{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}">
{_groups}
</a>
</div>
</div>
<form class="header_search_inputbt">
<input name="type" type="hidden" value="{$type ?? 'users'}" />
<input name="query" class="header_search_input" placeholder="{_search_placeholder}" value="{$_GET['query'] ?? ''}" />
<button class="button_search">{_search_button}</button>
</form>
<p style="margin-left: 15px; margin-top: 0;">
<b>{tr("results", $count)}</b>
</p>
<div>
{/block}
{block link|strip|stripHtml} {block link|strip|stripHtml}
{$x->getURL()} {if $type != "apps"}
{$x->getURL()}
{else}
/app{$x->getId()}
{/if}
{/block} {/block}
{block preview} {block preview}
@ -55,17 +27,72 @@
{/block} {/block}
{block name} {block name}
<text style="overflow: hidden;">&nbsp;{$x->getCanonicalName()}</text> {if $type != "apps"}
<img n:if="$x->isVerified()" <text style="overflow: hidden;">&nbsp;{$x->getCanonicalName()}
class="name-checkmark" {if $_GET['sort'] == "rating"}({$x->getRating()}%)
src="/assets/packages/static/openvk/img/checkmark.png" {elseif $_GET['sort'] == "id"}(id{$x->getId()}){/if}</text>
/> <img n:if="$x->isVerified()"
class="name-checkmark"
src="/assets/packages/static/openvk/img/checkmark.png"
/>
{else}
{$x->getName()}
{/if}
{/block} {/block}
{block description} {block description}
<table class="ugc-table"> <table class="ugc-table">
<tbody> <tbody>
{if $type === "users"} {if $type === "users"}
{if !is_null($_GET['status']) && $_GET['status'] != ""}
<tr>
<td><span class="nobold">{_status}:</span></td>
<td>{$x->getStatus()}</td>
</tr>
{/if}
{if !is_null($_GET['city']) && $_GET['city'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_city}:</span></td>
<td>{$x->getCity()}</td>
</tr>
{/if}
{if !is_null($_GET['city']) && $_GET['hometown'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_hometown}:</span></td>
<td>{$x->getHometown()}</td>
</tr>
{/if}
{if !is_null($_GET['politViews']) && $_GET['politViews'] != 0 && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_politViews}:</span></td>
<td>{tr("politViews_".$x->getPoliticalViews())}</td>
</tr>
{/if}
{if !is_null($_GET['email']) && $_GET['email'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_email}:</span></td>
<td>{$x->getContactEmail()}</td>
</tr>
{/if}
{if !is_null($_GET['telegram']) && $_GET['telegram'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_telegram}:</span></td>
<td><a href="tg://resolve?domain={$x->getTelegram()}">@{$x->getTelegram()}</a></td>
</tr>
{/if}
{if !is_null($_GET['site']) && $_GET['site'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_personal_website}:</span></td>
<td><a href="{$x->getWebsite()}">{$x->getWebsite()}</a></td>
</tr>
{/if}
{if !is_null($_GET['address']) && $_GET['address'] != "" && $x->getPrivacySetting("page.info.read") > 1}
<tr>
<td><span class="nobold">{_address}:</span></td>
<td><a href="{$x->getPhysicalAddress()}">{$x->getPhysicalAddress()}</a></td>
</tr>
{/if}
{if $x->getPrivacySetting("page.info.read") > 1}
<tr> <tr>
<td><span class="nobold">{_gender}: </span></td> <td><span class="nobold">{_gender}: </span></td>
<td>{$x->isFemale() ? tr("female") : tr("male")}</td> <td>{$x->isFemale() ? tr("female") : tr("male")}</td>
@ -78,15 +105,253 @@
<td><span class="nobold">{_registration_date}: </span></td> <td><span class="nobold">{_registration_date}: </span></td>
<td>{$x->getRegistrationTime()}</td> <td>{$x->getRegistrationTime()}</td>
</tr> </tr>
{/if}
{/if} {/if}
<tr> <tr>
{if !empty($x->getDescription())}
{if $type != "apps"}
<td> <td>
<span class="nobold">{_description}:</span> <span class="nobold">{_description}:</span>
</td> </td>
{/if}
<td> <td>
{$x->getDescription() ?? '(' . tr("none") . ')'} {$x->getDescription() ?? '(' . tr("none") . ')'}
</td> </td>
</tr> </tr>
{/if}
{if $type == "groups"}
<td>
<span class="nobold">{_size}:</span>
</td>
<td>
{tr("participants", $x->getFollowersCount())}
</td>
{/if}
</tbody> </tbody>
</table> </table>
{/block} {/block}
{block content}
<style>
.comment, .post-divider
{
border:none;
}
</style>
<div style="margin-top:-7px">
{include "../components/paginator.xml", conf => (object) [
"page" => $page,
"count" => $count,
"amount" => sizeof($data),
"perPage" => $perPage ?? OPENVK_DEFAULT_PER_PAGE,
"atBottom" => false,
]}
</div>
<p style="margin-left: 15px; margin-top: 0;">
<b>{tr("results", $count)}</b>
</p>
<div>
{include searchOptions}
{var $data = is_array($iterator) ? $iterator : iterator_to_array($iterator)}
<div class="container_gray borderup" style="float:left;width:73.3%;">
{if sizeof($data) > 0}
{if $type == "users" || $type == "groups" || $type == "apps"}
<div class="content" n:foreach="$data as $dat">
<table>
<tbody>
<tr>
<td valign="top">
<a href="{include link, x => $dat}">
{include preview, x => $dat}
</a>
</td>
<td valign="top" style="width: 100%">
{ifset infotable}
{include infotable, x => $dat}
{else}
<a href="{include link, x => $dat}">
<b>
{include name, x => $dat}
</b>
</a>
<br/>
{include description, x => $dat}
{/ifset}
</td>
<td n:ifset="actions" valign="top" class="action_links" style="width: 150px;">
{include actions, x => $dat}
</td>
</tr>
</tbody>
</table>
</div>
{elseif $type == "posts"}
<div n:foreach="$data as $dat" class="content">
{if !$dat || $dat->getTargetWall() < 0 && $dat->getWallOwner()->isHideFromGlobalFeedEnabled()}
{_closed_group_post}.
{else}
{include "../components/post.xml", post => $dat, commentSection => true, onWallOf => true}
{/if}
</div>
{elseif $type == "comments"}
<div n:foreach="$data as $dat" class="content">
{if !$dat->getTarget() || $dat->getTarget()->isDeleted()}
{_deleted_target_comment}.
{else}
{include "../components/comment.xml", comment => $dat, linkW => true}
{/if}
</div>
{elseif $type == "videos"}
{foreach $data as $dat}
{if $dat->getOwner()->isDeleted()}
{php continue;}
{else}
<div class="content">
{include "../components/video.xml", video => $dat}
</div>
{/if}
{/foreach}
{elseif $type == "audios"}
хуй
{/if}
{else}
{ifset customErrorMessage}
{include customErrorMessage}
{else}
{include "../components/nothing.xml"}
{/ifset}
{/if}
</div>
<script>
window.addEventListener("load", (event) => {
document.getElementsByClassName("container_gray")[0].style.minHeight = document.getElementsByClassName("searchOptions")[0].clientHeight+"px";
document.getElementsByClassName("searchOptions")[0].style.minHeight = document.getElementsByClassName("container_gray")[0].clientHeight-3+"px";
})
</script>
{/block}
{block searchOptions}
<div class="searchOptions">
<ul class="searchList">
<li {if $type === "users"} id="used"{/if}><a href="/search?type=users{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id"> {_s_people} {if $type === "users"} ({$count}){/if}</a></li>
<li {if $type === "groups"} id="used"{/if}><a href="/search?type=groups{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id"> {_s_groups} {if $type === "groups"} ({$count}){/if}</a></li>
<li {if $type === "comments"}id="used"{/if}><a href="/search?type=comments{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id">{_s_comments} {if $type === "comments"}({$count}){/if}</a></li>
<li {if $type === "posts"} id="used"{/if}><a href="/search?type=posts{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id"> {_s_posts} {if $type === "posts"} ({$count}){/if}</a></li>
<li {if $type === "videos"} id="used"{/if}><a href="/search?type=videos{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id"> {_s_videos} {if $type === "videos"} ({$count}){/if}</a></li>
<!--<li {if $type === "audios"}id="used"{/if}><a href="/search?type=audios{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id">{_s_audios} {if $type === "audios"} ({$count}){/if}</a></li>-->
<li {if $type === "apps"} id="used"{/if}><a href="/search?type=apps{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id"> {_s_apps} {if $type === "apps"} ({$count}){/if}</a></li>
<!--<li {if $type === "notes"}id="used"{/if}><a href="/search?type=notes{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}&sort=id">{_s_notes} {if $type === "notes"}({$count}){/if}</a></li>-->
</ul>
<div class="searchOption">
<div class="searchOptionName" id="n_sort" onclick="hideParams('sort')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_s_order_by}</div>
<div class="searchOptionBlock" id="s_sort">
<select name="sort" form="searcher" id="sortyor">
<option value="id" {if $_GET["sort"] == "name"}selected{/if}>{_s_order_by_id}</option>
{if $type == "users"}
<option value="name" {if $_GET["sort"] == "name"}selected{/if}>{_s_order_by_name}</option>
{if OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"]}
<option value="rating" {if $_GET["sort"] == "rating"}selected{/if}>{_s_order_by_rating}</option>
{/if}
{/if}
</select>
<div id="invertor">
<input type="checkbox" name="invert" value="1" form="searcher" {if !is_null($_GET['invert']) && $_GET['invert'] == "1"}checked{/if}>{_s_order_invert}
</div>
</div>
</div>
{if $type !== "groups" && $type !== "apps"} {* В OpenVK не сохраняется дата создания группы *}
<div class="searchOption">
<div class="searchOptionName" id="n_dates" onclick="hideParams('dates')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_s_by_date}</div>
<div class="searchOptionBlock" id="s_dates">
<p id="bydate">{_s_date_before}:<br>
<input type="date" name="datebefore"
form="searcher"
id="bydate"
style="width:100%"
value="{if !is_null($_GET['datebefore'])}{$_GET['datebefore']}{/if}"
min="2019-11-19"
max={date('Y-m-d')}></p>
<p id="bydate">{_s_date_after}:<br>
<input type="date" name="dateafter"
form="searcher"
style="width:100%"
id="bydate"
value="{if !is_null($_GET['dateafter'])}{$_GET['dateafter']}{/if}"
min="2019-11-18"
max={date('Y-m-d')}></p>
</div>
</div>
{/if}
{if $type === "users"}
<div class="searchOption">
<div class="searchOptionName" id="n_main" onclick="hideParams('main')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_main}</div>
<div class="searchOptionBlock" id="s_main">
<input type="text" value="{if !is_null($_GET['status'])}{$_GET['status']}{/if}" form="searcher" placeholder="{_status}" name="status">
<input type="text" value="{if !is_null($_GET['city'])}{$_GET['city']}{/if}" form="searcher" placeholder="{_city}" name="city">
<input type="text" value="{if !is_null($_GET['hometown'])}{$_GET['hometown']}{/if}" form="searcher" placeholder="{_hometown}" name="hometown">
<input name="is_online" type="checkbox" {if !is_null($_GET['is_online']) && $_GET['is_online'] == "1"}checked{/if} form="searcher" value="1">{_s_now_on_site}
</div>
</div>
<div class="searchOption">
<div class="searchOptionName" id="n_gender" onclick="hideParams('gender')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_gender}</div>
<div class="searchOptionBlock" id="s_gender">
<p><input type="radio" form="searcher" {if $_GET['gender'] == 0}checked{/if} name="gender" value="0">{_male}</p>
<p><input type="radio" form="searcher" {if $_GET['gender'] == 1}checked{/if} name="gender" value="1">{_female}</p>
<p><input type="radio" form="searcher" {if $_GET['gender'] == 2 || is_null($_GET['gender'])}checked{/if} name="gender" value="2">{_s_any}</p>
</div>
</div>
<div class="searchOption">
<div class="searchOptionName" id="n_relationship" onclick="hideParams('relationship')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{ovk_proc_strtr(tr("relationship"), 14)}</div>
<div class="searchOptionBlock" id="s_relationship">
<select name="maritalstatus" form="searcher">
<option n:foreach="range(0, 8) as $i" value="{$i}" {if $_GET['maritalstatus'] == $i}selected{/if} form="searcher">
{tr("relationship_".$i)}
</option>
</select>
</div>
</div>
<div class="searchOption">
<div class="searchOptionName" id="n_politViews" onclick="hideParams('politViews')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_politViews}</div>
<div class="searchOptionBlock" id="s_politViews">
<select name="politViews" form="searcher">
<option n:foreach="range(0, 9) as $i" value="{$i}" {if $_GET['politViews'] == $i}selected{/if} form="searcher">
{tr("politViews_".$i)}
</option>
</select>
</div>
</div>
<div class="searchOption">
<div class="searchOptionName" id="n_contacts" onclick="hideParams('contacts')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_contacts}</div>
<div class="searchOptionBlock" id="s_contacts">
<input type="text" name="email" value="{if !is_null($_GET['email'])}{$_GET['email']}{/if}" form="searcher" placeholder="{_email}">
<input type="text" name="telegram" value="{if !is_null($_GET['telegram'])}{$_GET['telegram']}{/if}" form="searcher" placeholder="{_telegram}"><br id="contacts">
<input type="text" name="site" value="{if !is_null($_GET['site'])}{$_GET['site']}{/if}" form="searcher" placeholder="{_personal_website}"><br id="contacts">
<input type="text" name="address" value="{if !is_null($_GET['address'])}{$_GET['address']}{/if}" form="searcher" placeholder="{_address}">
</div>
</div>
<div class="searchOption">
<div class="searchOptionName" id="n_interests" onclick="hideParams('interests')"><img src="/assets/packages/static/openvk/img/hide.png" class="searchHide">{_interests}</div>
<div class="searchOptionBlock" id="s_interests">
<input type="text" value="{if !is_null($_GET['interests'])}{$_GET['interests']}{/if}" form="searcher" placeholder="{_interests}" name="interests">
<input type="text" value="{if !is_null($_GET['fav_mus'])}{$_GET['fav_mus']}{/if}" form="searcher" placeholder="{_favorite_music}" name="fav_mus">
<input type="text" value="{if !is_null($_GET['fav_films'])}{$_GET['fav_films']}{/if}" form="searcher" placeholder="{_favorite_films}" name="fav_films">
<input type="text" value="{if !is_null($_GET['fav_shows'])}{$_GET['fav_shows']}{/if}" form="searcher" placeholder="{_favorite_shows}" name="fav_shows">
<input type="text" value="{if !is_null($_GET['fav_books'])}{$_GET['fav_books']}{/if}" form="searcher" placeholder="{_favorite_books}" name="fav_books">
<input type="text" value="{if !is_null($_GET['fav_quote'])}{$_GET['fav_quote']}{/if}" form="searcher" placeholder="{_favorite_quotes}" name="fav_quote">
</div>
</div>
<!--<input name="with_photo" type="checkbox" {if !is_null($_GET['with_photo']) && $_GET['with_photo'] == "on"}checked{/if} form="searcher">{_s_with_photo}-->
{/if}
<input class="button" type="button" id="dnt" value="{_reset}" onclick="resetSearch()">
</div>
{/block}

View file

@ -420,11 +420,11 @@
</tr> </tr>
<tr n:if="!is_null($user->getHometown())"> <tr n:if="!is_null($user->getHometown())">
<td class="label"><span class="nobold">{_hometown}:</span></td> <td class="label"><span class="nobold">{_hometown}:</span></td>
<td class="data">{$user->getHometown()}</td> <td class="data"><a href="/search?type=users&query=&hometown={urlencode($user->getHometown())}">{$user->getHometown()}</a></td>
</tr> </tr>
<tr> <tr>
<td class="label"><span class="nobold">{_politViews}:</span></td> <td class="label"><span class="nobold">{_politViews}:</span></td>
<td class="data">{var $pviews = $user->getPoliticalViews()}{_"politViews_$pviews"}</td> <td class="data"><a {if $user->getPoliticalViews() != 0}href="/search?type=users&query=&politViews={$user->getPoliticalViews()}"{/if}>{var $pviews = $user->getPoliticalViews()}{_"politViews_$pviews"}</a></td>
</tr> </tr>
<tr n:if="!is_null($user->getBirthday())"> <tr n:if="!is_null($user->getBirthday())">
<td class="label"><span class="nobold">{_birth_date}:</span></td> <td class="label"><span class="nobold">{_birth_date}:</span></td>
@ -470,7 +470,7 @@
</tr> </tr>
<tr n:if="!is_null($user->getCity())"> <tr n:if="!is_null($user->getCity())">
<td class="label"><span class="nobold">{_city}:</span></td> <td class="label"><span class="nobold">{_city}:</span></td>
<td class="data">{$user->getCity()}</td> <td class="data"><a href="/search?type=users&query=&city={$user->getCity()}">{$user->getCity()}</a></td>
</tr> </tr>
<tr n:if="!is_null($user->getPhysicalAddress())"> <tr n:if="!is_null($user->getPhysicalAddress())">
<td class="label"><span class="nobold">{_address}:</span></td> <td class="label"><span class="nobold">{_address}:</span></td>
@ -484,23 +484,54 @@
<tbody n:ifcontent> <tbody n:ifcontent>
<tr n:if="!is_null($user->getInterests())"> <tr n:if="!is_null($user->getInterests())">
<td class="label"><span class="nobold">{_interests}: </span></td> <td class="label"><span class="nobold">{_interests}: </span></td>
<td class="data">{$user->getInterests()}</td> <td class="data">
{var $interests = explode(", ", $user->getInterests())}
{foreach $interests as $interest}
<a href="/search?type=users&query=&interests={urlencode($interest)}">{$interest}</a>{if $interest != end($interests)},{/if}
{/foreach}
</td>
</tr> </tr>
<tr n:if="!is_null($user->getFavoriteMusic())"> <tr n:if="!is_null($user->getFavoriteMusic())">
<td class="label"><span class="nobold">{_favorite_music}: </span></td> <td class="label"><span class="nobold">{_favorite_music}: </span></td>
<td class="data">{$user->getFavoriteMusic()}</td> <td class="data">
{var $musics = explode(", ", $user->getFavoriteMusic())}
{foreach $musics as $music}
<a href="/search?type=users&query=&fav_mus={urlencode($music)}">{$music}</a>{if $music != end($musics)},{/if}
{/foreach}
</td>
</tr> </tr>
<tr n:if="!is_null($user->getFavoriteFilms())"> <tr n:if="!is_null($user->getFavoriteFilms())">
<td class="label"><span class="nobold">{_favorite_films}: </span></td> <td class="label"><span class="nobold">{_favorite_films}: </span></td>
<td class="data">{$user->getFavoriteFilms()}</td> <td class="data">
{var $films = explode(", ", $user->getFavoriteFilms())}
{foreach $films as $film}
<a href="/search?type=users&query=&fav_films={urlencode($film)}">{$film}</a>{if $film != end($films)},{/if}
{/foreach}
</td>
</tr> </tr>
<tr n:if="!is_null($user->getFavoriteShows())"> <tr n:if="!is_null($user->getFavoriteShows())">
<td class="label"><span class="nobold">{_favorite_shows}: </span></td> <td class="label"><span class="nobold">{_favorite_shows}: </span></td>
<td class="data">{$user->getFavoriteShows()}</td> <td class="data">
{var $shows = explode(", ", $user->getFavoriteShows())}
{foreach $shows as $show}
<a href="/search?type=users&query=&fav_shows={urlencode($show)}">{$show}</a>{if $show != end($shows)},{/if}
{/foreach}
</td>
</tr> </tr>
<tr n:if="!is_null($user->getFavoriteBooks())"> <tr n:if="!is_null($user->getFavoriteBooks())">
<td class="label"><span class="nobold">{_favorite_books}: </span></td> <td class="label"><span class="nobold">{_favorite_books}: </span></td>
<td class="data">{$user->getFavoriteBooks()}</td> <td class="data">
{var $books = explode(", ", $user->getFavoriteBooks())}
{foreach $books as $book}
<a href="/search?type=users&query=&fav_books={urlencode($book)}">{$book}</a>{if $book != end($books)},{/if}
{/foreach}
</td>
</tr> </tr>
<tr n:if="!is_null($user->getFavoriteQuote())"> <tr n:if="!is_null($user->getFavoriteQuote())">
<td class="label"><span class="nobold">{_favorite_quotes}: </span></td> <td class="label"><span class="nobold">{_favorite_quotes}: </span></td>

View file

@ -29,11 +29,12 @@
</div> </div>
</div> </div>
<div n:if="isset($thisUser) &&! ($compact ?? false)" class="post-menu"> <div n:if="isset($thisUser) &&! ($compact ?? false)" class="post-menu">
<a href="#_comment{$comment->getId()}" class="date">{$comment->getPublicationTime()}</a>&nbsp;| <a {if is_null($linkW)}href="#_comment{$comment->getId()}"{else}href="wall{!is_null($comment->getTarget()) ? $comment->getTarget()->getPrettyId() : $comment->getOwner()->getId()}#_comment{$comment->getId()}"{/if} class="date">{$comment->getPublicationTime()}</a>&nbsp;|
{if $comment->canBeDeletedBy($thisUser)} {if $comment->canBeDeletedBy($thisUser)}
<a href="/comment{$comment->getId()}/delete">{_delete}</a>&nbsp;| <a href="/comment{$comment->getId()}/delete">{_delete}</a>&nbsp;|
{/if} {/if}
<a class="comment-reply">{_reply}</a> {if is_null($linkW)}
<a class="comment-reply">{_reply}</a>{/if}
<div style="float: right; font-size: .7rem;"> <div style="float: right; font-size: .7rem;">
<a class="post-like-button" href="/comment{$comment->getId()}/like?hash={rawurlencode($csrfToken)}"> <a class="post-like-button" href="/comment{$comment->getId()}/like?hash={rawurlencode($csrfToken)}">
<div class="heart" style="{if $comment->hasLikeFrom($thisUser)}opacity: 1;{else}opacity: 0.4;{/if}"></div> <div class="heart" style="{if $comment->hasLikeFrom($thisUser)}opacity: 1;{else}opacity: 0.4;{/if}"></div>

View file

@ -0,0 +1,35 @@
<table>
<tbody>
<tr>
<td valign="top">
<div class="video-preview">
<a href="/video{$video->getPrettyId()}">
<img src="{$video->getThumbnailURL()}"
style="max-width: 170px; max-height: 127px; margin: auto;" >
</a>
</div>
</td>
<td valign="top" style="width: 100%">
{ifset infotable}
{include infotable, x => $dat}
{else}
<a href="/video{$video->getPrettyId()}">
<b>
{$video->getName()}
</b>
</a>
<br/>
<p>
<span>{$video->getDescription() ?? ""}</span>
</p>
<span style="color: grey;">{_video_uploaded} {$video->getPublicationTime()}</span><br/>
<p>
<a href="/video{$video->getPrettyId()}">{_view_video}</a>
{if $video->getCommentsCount() > 0}| <a href="/video{$video->getPrettyId()}#comments">{_comments} ({$video->getCommentsCount()})</a>{/if}
</p>
{/ifset}
</td>
</tr>
</tbody>
</table>

View file

@ -97,6 +97,14 @@ h1 {
background-size: 1.5px 41px; background-size: 1.5px 41px;
} }
.header_navigation .nodivider {
display: inline-block;
height: 29px;
padding: 11px 4px 0 7px;
background: none;
background-size: 1.5px 41px;
}
.header_navigation .link a { .header_navigation .link a {
color: #D7D7D7; color: #D7D7D7;
text-decoration: none; text-decoration: none;
@ -670,6 +678,7 @@ select {
font-family: tahoma, verdana, arial, sans-serif; font-family: tahoma, verdana, arial, sans-serif;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
outline:none;
} }
.header2 { .header2 {
@ -2301,6 +2310,167 @@ a.poll-retract-vote {
display: none; display: none;
} }
.searchOptions
{
overflow: hidden;
width:25.5%;
border-top:1px solid #E5E7E6;
float:right;
scrollbar-width: none;
font-size:12px;
background-color:#f7f7f7;
margin-right: -7px;
}
.searchBtn
{
border: solid 1px #575757;
background-color: #696969;
color:white;
margin-left: -11px;
padding-bottom:2px;
width:80px;
cursor: pointer;
box-shadow: 0px 2px 0px 0px rgba(255, 255, 255, 0.18) inset;
margin-top: 1px;
}
.searchBtn:active
{
border: solid 1px #666666;
background-color: #696969;
color:white;
box-shadow: 0px -2px 0px 0px rgba(255, 255, 255, 0.18) inset;
}
.searchList
{
list-style: none;
user-select: none;
padding-left:0px;
}
.searchList #used
{
margin-left:0px;
color: white;
padding:2px;
padding-top:5px;
padding-bottom:5px;
border: solid 0.125rem #696969;
background:linear-gradient(#888888,#858585);
margin-bottom:2px;
padding-left:9px;
width:87%;
}
.searchList #used a
{
color: white;
}
.sr:focus
{
outline:none;
}
.searchHide
{
padding-right: 5px;
}
.searchList li
{
margin-left:0px;
color: #2B587A !important;
cursor:pointer;
padding:2px;
padding-top:5px;
padding-bottom:5px;
margin-bottom:2px;
padding-left:9px;
}
.searchList li a
{
min-width:100%;
}
.searchList li:hover
{
margin-left:0px;
color: #2B587A !important;
background:#ebebeb;
padding:2px;
padding-top:5px;
padding-bottom:5px;
margin-bottom:2px;
padding-left:9px;
width:91%;
}
.whatFind
{
color:rgb(128, 128, 128);
background:none;
border:none;
position:absolute;
width:150px;
cursor:pointer;
right:80px;
text-align:right;
margin-top: 0.5px;
}
.searchOptionName
{
cursor:pointer;
background-color: #EAEAEA;
padding-left:5px;
padding-top:5px;
padding-bottom:5px;
width: 90%;
font-weight: 600;
color: #585858;
border-bottom: 2px solid #E4E4E4;
}
.searchOption
{
user-select: none;
}
.searchOptionBlock
{
margin-top: -5px;
padding-top:10px;
max-width:92%;
padding-bottom:6px;
}
.searchOptionBlock select
{
padding-left:7px;
padding-top:3px;
padding-bottom:3px;
cursor:pointer;
}
.searchOptionBlock input[type=text], input[type=date]
{
margin-bottom:5px;
}
.borderup
{
border-top:1px solid #E5E7E6;
}
#searchInput
{
transition: .3s linear;
}
#standaloneCommentBox { #standaloneCommentBox {
position: sticky; position: sticky;
top: 0; top: 0;

BIN
Web/static/img/hide.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

BIN
Web/static/img/show.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

View file

@ -568,6 +568,80 @@ function deleteAvatar(avatar)
]); ]);
} }
function expandSearch()
{
// console.log("search expanded")
let els = document.querySelectorAll("div.dec")
for(const element of els)
{
element.style.display = "none"
}
document.querySelector(".whatFind").style.display = "block";
document.querySelector(".whatFind").style.marginRight = "-80px";
document.getElementById("searchInput").style.width = "627px";
document.getElementById("searchInput").style.background = "none";
document.getElementById("searchInput").style.backgroundColor = "#fff";
document.getElementById("searchInput").style.paddingLeft = "6px";
srch.classList.add("nodivider")
}
async function decreaseSearch()
{
// чтобы люди успели выбрать что искать и поиск не скрывался сразу
await new Promise(r => setTimeout(r, 4000));
// console.log("search decreased")
if(document.activeElement !== searchInput)
{
document.getElementById("searchInput").style.background = "url('/assets/packages/static/openvk/img/search_icon.png') no-repeat 3px 4px";
document.getElementById("searchInput").style.backgroundColor = "#fff";
document.getElementById("searchInput").style.paddingLeft = "18px";
document.getElementById("searchInput").style.width = "120px";
document.querySelector(".whatFind").style.display = "none";
await new Promise(r => setTimeout(r, 300));
srch.classList.remove("nodivider")
let els = document.querySelectorAll("div.dec")
for(const element of els)
{
element.style.display = "inline-block"
}
}
}
function hideParams(name)
{
$("#s_"+name).slideToggle(250, "swing");
if($(`#n_${name} img`).attr("src") == "/assets/packages/static/openvk/img/hide.png")
{
$("#n_"+name+" img").attr("src", "/assets/packages/static/openvk/img/show.png");
} else {
$("#n_"+name+" img").attr("src", "/assets/packages/static/openvk/img/hide.png");
}
}
function resetSearch()
{
let inputs = document.querySelectorAll("input")
let selects = document.querySelectorAll("select")
for(const input of inputs)
{
if(input != dnt) {
input.value = ""
}
}
for(const select of selects)
{
if(select != sortyor && select != document.querySelector(".whatFind")) {
select.value = 0
}
}
}
$(document).on("scroll", () => { $(document).on("scroll", () => {
if($(document).scrollTop() > $(".sidebar").height() + 50) { if($(document).scrollTop() > $(".sidebar").height() + 50) {
$(".floating_sidebar")[0].classList.add("show"); $(".floating_sidebar")[0].classList.add("show");

View file

@ -91,6 +91,7 @@
"no_information_provided" = "No information provided."; "no_information_provided" = "No information provided.";
"deceased_person" = "Deceased person"; "deceased_person" = "Deceased person";
"none" = "none"; "none" = "none";
"desc_none" = "no description";
"send" = "Send"; "send" = "Send";
"years_zero" = "0 year old"; "years_zero" = "0 year old";
@ -478,7 +479,12 @@
"apply_style_for_this_device" = "Apply style only for this device"; "apply_style_for_this_device" = "Apply style only for this device";
"search_for_groups" = "Search for groups"; "search_for_groups" = "Search for groups";
"search_for_people" = "Search for people"; "search_for_users" = "Search for people";
"search_for_posts" = "Search for posts";
"search_for_comments" = "Search for comments";
"search_for_videos" = "Search for videos";
"search_for_apps" = "Search for apps";
"search_for_notes" = "Search for notes";
"search_button" = "Find"; "search_button" = "Find";
"search_placeholder" = "Start typing any name, title or word"; "search_placeholder" = "Start typing any name, title or word";
"results_zero" = "No results"; "results_zero" = "No results";
@ -1450,3 +1456,48 @@
"tour_section_14_bottom_text_1" = "Screenshots"; "tour_section_14_bottom_text_1" = "Screenshots";
"tour_section_14_bottom_text_2" = "This concludes the tour of the site. If you want to try our mobile app, create your own group here, invite your friends or find new ones, or just have some fun in general, you can do it right now with a small <a href='/reg'>registration</a>"; "tour_section_14_bottom_text_2" = "This concludes the tour of the site. If you want to try our mobile app, create your own group here, invite your friends or find new ones, or just have some fun in general, you can do it right now with a small <a href='/reg'>registration</a>";
"tour_section_14_bottom_text_3" = "This concludes the tour of the site"; "tour_section_14_bottom_text_3" = "This concludes the tour of the site";
/* Search */
"s_people" = "People";
"s_groups" = "Clubs";
"s_events" = "Events";
"s_apps" = "Applications";
"s_questions" = "Questions";
"s_notes" = "Notes";
"s_themes" = "Themes";
"s_posts" = "Posts";
"s_comments" = "Comments";
"s_videos" = "Videos";
"s_audios" = "Music";
"s_by_people" = "for people";
"s_by_groups" = "for groups";
"s_by_posts" = "for posts";
"s_by_comments" = "for comments";
"s_by_videos" = "for videos";
"s_by_apps" = "for apps";
"s_by_audios" = "for musics";
"s_order_by" = "Order by...";
"s_order_by_id" = "By id";
"s_order_by_name" = "By name";
"s_order_by_random" = "By random";
"s_order_by_rating" = "By rating";
"s_order_invert" = "Invert";
"s_by_date" = "By date";
"s_date_before" = "Before";
"s_date_after" = "After";
"s_main" = "Main";
"s_now_on_site" = "now on site";
"s_with_photo" = "with photo";
"s_only_in_names" = "only in names";
"s_any" = "any";
"reset" = "Reset";
"closed_group_post" = "This is a post from private group";
"deleted_target_comment" = "This comment belongs to deleted post";

View file

@ -80,6 +80,7 @@
"no_information_provided" = "Информация отсутствует."; "no_information_provided" = "Информация отсутствует.";
"deceased_person" = "Страница покойного человека"; "deceased_person" = "Страница покойного человека";
"none" = "отсутствует"; "none" = "отсутствует";
"desc_none" = "описание отсутствует";
"send" = "Отправить"; "send" = "Отправить";
"years_zero" = "0 лет"; "years_zero" = "0 лет";
"years_one" = "1 год"; "years_one" = "1 год";
@ -452,7 +453,12 @@
"round_avatars" = "Круглые"; "round_avatars" = "Круглые";
"apply_style_for_this_device" = "Применить стиль только для этого устройства"; "apply_style_for_this_device" = "Применить стиль только для этого устройства";
"search_for_groups" = "Поиск групп"; "search_for_groups" = "Поиск групп";
"search_for_people" = "Поиск людей"; "search_for_users" = "Поиск людей";
"search_for_posts" = "Поиск записей";
"search_for_comments" = "Поиск комментариев";
"search_for_videos" = "Поиск видео";
"search_for_apps" = "Поиск приложений";
"search_for_notes" = "Поиск записок";
"search_button" = "Найти"; "search_button" = "Найти";
"search_placeholder" = "Начните вводить любое имя, название или слово"; "search_placeholder" = "Начните вводить любое имя, название или слово";
"results_zero" = "Ни одного результата"; "results_zero" = "Ни одного результата";
@ -1343,4 +1349,49 @@
"tour_section_14_bottom_text_1" = "Скриншоты приложения"; "tour_section_14_bottom_text_1" = "Скриншоты приложения";
"tour_section_14_bottom_text_2" = "На этом экскурсия по сайту завершена. Если вы хотите попробовать наше мобильное приложение, создать здесь свою группу, позвать своих друзей или найти новых, или вообще просто как-нибудь поразвлекаться, то это можно сделать прямо сейчас, пройдя небольшую <a href='/reg'>регистрацию</a>"; "tour_section_14_bottom_text_2" = "На этом экскурсия по сайту завершена. Если вы хотите попробовать наше мобильное приложение, создать здесь свою группу, позвать своих друзей или найти новых, или вообще просто как-нибудь поразвлекаться, то это можно сделать прямо сейчас, пройдя небольшую <a href='/reg'>регистрацию</a>";
"tour_section_14_bottom_text_3" = "На этом экскурсия по сайту завершена." "tour_section_14_bottom_text_3" = "На этом экскурсия по сайту завершена.";
/* Search */
"s_people" = "Люди";
"s_groups" = "Группы";
"s_events" = "События";
"s_apps" = "Приложения";
"s_questions" = "Вопросы";
"s_notes" = "Заметки";
"s_themes" = "Темы";
"s_posts" = "Записи";
"s_comments" = "Комментарии";
"s_videos" = "Видео";
"s_audios" = "Аудио";
"s_by_people" = "по людям";
"s_by_groups" = "по группам";
"s_by_posts" = "по записям";
"s_by_comments" = "по комментариям";
"s_by_videos" = "по видео";
"s_by_apps" = "по приложениям";
"s_by_audios" = "по музыке";
"s_order_by" = "Порядок";
"s_order_by_id" = "По id";
"s_order_by_name" = "По имени";
"s_order_by_random" = "По случайности";
"s_order_by_rating" = "По рейтингу";
"s_order_invert" = "Инвертировать";
"s_by_date" = "По дате";
"s_date_before" = "До";
"s_date_after" = "После";
"s_main" = "Основное";
"s_now_on_site" = "cейчас на сайте";
"s_with_photo" = "с фото";
"s_only_in_names" = "только в именах";
"s_any" = "любой";
"reset" = "Сброс";
"closed_group_post" = "Эта запись из закрытой группы";
"deleted_target_comment" = "Этот комментарий принадлежит к удалённой записи";

View file

@ -151,6 +151,9 @@
"pinned" = "высказыванiе наверху"; "pinned" = "высказыванiе наверху";
"comments_tip" = "Будьте первымъ, кто оставитъ замѣчанiе."; "comments_tip" = "Будьте первымъ, кто оставитъ замѣчанiе.";
"your_comment" = "Вашъ комментарій"; "your_comment" = "Вашъ комментарій";
"auditory" = "Смотритѣли";
"in_wall" = "на странiцу";
"in_group" = "в общѣство";
"shown" = "Показано"; "shown" = "Показано";
"x_out_of" = "$1 изъ"; "x_out_of" = "$1 изъ";
"wall_zero" = "Нѣтъ извѣстій"; "wall_zero" = "Нѣтъ извѣстій";
@ -236,6 +239,7 @@
"only_administrators" = "Только администраторы"; "only_administrators" = "Только администраторы";
"website" = "Сайтъ"; "website" = "Сайтъ";
"managed" = "Управляемые"; "managed" = "Управляемые";
"size" = "Размеръ";
"administrators_one" = "$1 администраторъ"; "administrators_one" = "$1 администраторъ";
"administrators_few" = "$1 администратора"; "administrators_few" = "$1 администратора";
@ -294,6 +298,35 @@
"albums_few" = "$1 альбома"; "albums_few" = "$1 альбома";
"albums_many" = "$1 альбомовъ"; "albums_many" = "$1 альбомовъ";
"albums_other" = "$1 альбомовъ"; "albums_other" = "$1 альбомовъ";
"albums_list_zero" = "У Васъ нетъ нi одного альбома с картiнками";
"albums_list_one" = "У Васъ одiн альбом с картiнками";
"albums_list_few" = "У Васъ $1 альбома с картiнками";
"albums_list_many" = "У Васъ $1 альбомовъ с картiнками";
"albums_list_other" = "У Васъ $1 альбомовъ с картiнками";
"add_image" = "Вклѣить фото";
"add_image_group" = "Вклѣйка фото";
"upload_new_picture" = "Вклеiть новую фото";
"uploading_new_image" = "Вклѣйка нового фото";
"friends_avatar" = "Знакомымъ будетъ проще узнать Васъ, если вы вклѣите своё настоящое фото.";
"groups_avatar" = "Хорошое фото сделает Вашу группу более узнаваѣмой.";
"formats_avatar" = "Вы можете вклѣить фото в формате JPG, GIF или PNG.";
"troubles_avatar" = "Ежѣли вознiкают проблѣмы с прикрѣплѣнiем, попробуйтѣ вклѣить фото меньшего размера.";
"webcam_avatar" = "Ежѣли Вашъ компьютер имѣет фотоаппаратъ, Вы можѣте <a href='javascript:'>сделать быстрое фото »</a>";
"update_avatar_notification" = "Фото странiцы обновлено";
"update_avatar_description" = "Нажмiте сюда, чтобы пѣрейти к просмотру";
"deleting_avatar" = "Вырѣзка фото";
"deleting_avatar_sure" = "Вы дѣйствительно хотите отклѣить фото?";
"deleted_avatar_notification" = "Фото успешно отклѣено";
"save_changes" = "Сохранiть измѣненiя";
"upd_m" = "обновил фото своѣй странiцы";
"upd_f" = "обновила фото своѣй странiцы";
"upd_g" = "обновило фото общѣства";
/* Notes */ /* Notes */
@ -375,7 +408,12 @@
"round_avatars" = "Круглые"; "round_avatars" = "Круглые";
"search_for_groups" = "Поискъ обществъ"; "search_for_groups" = "Поискъ обществъ";
"search_for_people" = "Поискъ людей"; "search_for_users" = "Поискъ граждан";
"search_for_posts" = "Поискъ высказыванiй";
"search_for_comments" = "Поискъ очерковъ";
"search_for_videos" = "Поискъ синематографовъ";
"search_for_apps" = "Поискъ забав";
"search_for_notes" = "Поискъ запiсокъ";
"search_button" = "Найти"; "search_button" = "Найти";
"results_zero" = "Ни одного результата"; "results_zero" = "Ни одного результата";
"results_one" = "Одинъ результатъ"; "results_one" = "Одинъ результатъ";
@ -689,3 +727,47 @@
"warning" = "Вниманіе"; "warning" = "Вниманіе";
"question_confirm" = "Это дѣйствіе нельзя отмѣнить. Вы дѣйствительно увѣрены въ томъ что хотите сдѣлать?"; "question_confirm" = "Это дѣйствіе нельзя отмѣнить. Вы дѣйствительно увѣрены въ томъ что хотите сдѣлать?";
/* Search */
"s_people" = "Гражданѣ";
"s_groups" = "Общѣства";
"s_events" = "События";
"s_apps" = "Забавы";
"s_questions" = "Вопросы";
"s_notes" = "Заметки";
"s_themes" = "Тѣмы";
"s_posts" = "Высказыванiя";
"s_comments" = "Очерки";
"s_videos" = "Сiнѣматографы";
"s_audios" = "Аудио";
"s_by_people" = "по гражданам";
"s_by_groups" = "по общѣствам";
"s_by_posts" = "по запiсям";
"s_by_comments" = "по очеркамъ";
"s_by_videos" = "по сiнѣматографамъ";
"s_by_apps" = "по забавам";
"s_by_audios" = "по музыке";
"s_order_by" = "Расположѣнiе";
"s_order_by_id" = "По порядковому номеру";
"s_order_by_name" = "По паспорту";
"s_order_by_random" = "По случайности";
"s_order_by_rating" = "По рейтингу";
"s_order_invert" = "Отразiть";
"s_by_date" = "По датѣ";
"s_date_before" = "До";
"s_date_after" = "После";
"s_main" = "Основное";
"s_now_on_site" = "cейчас тутъ";
"s_with_photo" = "с фотокарточкой";
"s_only_in_names" = "только в имѣнахъ";
"s_any" = "любой";
"reset" = "Сбросъ";
"closed_group_post" = "Это высказыванiе изъ закрытого общѣства";
"deleted_target_comment" = "Этотъ отзыв принадлѣжит к удалѣнному высказыванiю";

View file

@ -1,3 +1,5 @@
#include <ru>
"__locale" = "su_SU.utf8;su_SU.UTF-8;Rus"; "__locale" = "su_SU.utf8;su_SU.UTF-8;Rus";
"__WinEncoding" = "Windows-1251"; "__WinEncoding" = "Windows-1251";
@ -154,6 +156,9 @@
"pinned" = "закреплено"; "pinned" = "закреплено";
"comments_tip" = "Гражданин, будьте первым, кто напишет отзыв!"; "comments_tip" = "Гражданин, будьте первым, кто напишет отзыв!";
"your_comment" = "Ваш отзыв"; "your_comment" = "Ваш отзыв";
"auditory" = "Зрители";
"in_wall" = "в досье";
"in_group" = "в собрание";
"shown" = "Показано"; "shown" = "Показано";
"x_out_of" = "$1 из"; "x_out_of" = "$1 из";
"wall_zero" = "нет записей"; "wall_zero" = "нет записей";
@ -244,6 +249,7 @@
"only_administrators" = "Только администраторы"; "only_administrators" = "Только администраторы";
"website" = "Сайт"; "website" = "Сайт";
"managed" = "Управляемые"; "managed" = "Управляемые";
"size" = "Размер";
"administrators_one" = "$1 администратор"; "administrators_one" = "$1 администратор";
"administrators_few" = "$1 администратора"; "administrators_few" = "$1 администратора";
@ -308,6 +314,36 @@
"albums_few" = "$1 альбома с картинками"; "albums_few" = "$1 альбома с картинками";
"albums_many" = "$1 альбомов с картинками"; "albums_many" = "$1 альбомов с картинками";
"albums_other" = "$1 альбомов с картинками"; "albums_other" = "$1 альбомов с картинками";
"albums_list_zero" = "У Вас нет ни одного альбома с картинками";
"albums_list_one" = "У Вас один альбом с картинками";
"albums_list_few" = "У Вас $1 альбома с картинками";
"albums_list_many" = "У Вас $1 альбомов с картинками";
"albums_list_other" = "У Вас $1 альбомов с картинками";
"add_image" = "Поставить фотокарточку";
"add_image_group" = "Загрузка фотокарточки";
"upload_new_picture" = "Загрузить новую фотокарточку";
"uploading_new_image" = "Загрузка новой фотокарточки";
"friends_avatar" = "Знакомым будет проще узнать Вас, если вы загрузите свою настоящую фотокарточку.";
"groups_avatar" = "Хорошая фотокарточка сделает Ваше собрание более узнаваемым.";
"formats_avatar" = "Вы можете загрузить плёнку в формате JPG, GIF или PNG.";
"troubles_avatar" = "Если возникают проблемы с прикреплением, попробуйте выбрать фотокарточку меньшего размера.";
"webcam_avatar" = "Если ваш компьютер оснащён фотокамерой, Вы можете <a href='javascript:'>сделать быструю фотокарточку »</a>";
"update_avatar_notification" = "Фотокарточка досье обновлена";
"update_avatar_description" = "Нажмите сюда, чтобы перейти к рассмотрению";
"deleting_avatar" = "Удаление фотокарточки";
"deleting_avatar_sure" = "Вы действительно хотите удалить фотокарточку?";
"deleted_avatar_notification" = "Фотокарточка успешно откреплена";
"save_changes" = "Сохранить изменения";
"upd_m" = "обновил фотокарточку на своём досье";
"upd_f" = "обновила фотокарточку на своём досье";
"upd_g" = "обновило фотокарточку собрания";
/* Notes */ /* Notes */
@ -390,8 +426,14 @@
"cut" = "Обрезка"; "cut" = "Обрезка";
"round_avatars" = "Круглая картинка"; "round_avatars" = "Круглая картинка";
"search_for_groups" = "Розыск клубов"; "search_for_groups" = "Розыск собраний";
"search_for_people" = "Розыск граждан"; "search_for_users" = "Розыск граждан";
"search_for_posts" = "Розыск записей";
"search_for_comments" = "Розыск отзывов";
"search_for_videos" = "Розыск кинолент";
"search_for_apps" = "Розыск приложений";
"search_for_notes" = "Розыск записок";
"search_button" = "Найти"; "search_button" = "Найти";
"search_placeholder" = "Начните вводить любое имя, название или слово"; "search_placeholder" = "Начните вводить любое имя, название или слово";
"results_zero" = "Ни одного результата"; "results_zero" = "Ни одного результата";
@ -889,3 +931,48 @@
"instance_links" = "Ссылки страны:"; "instance_links" = "Ссылки страны:";
"my_apps" = "Досуг и отдых"; "my_apps" = "Досуг и отдых";
/* Search */
"s_people" = "Граждане";
"s_groups" = "Собрания";
"s_events" = "События";
"s_apps" = "Приложения";
"s_questions" = "Вопросы";
"s_notes" = "Заметки";
"s_themes" = "Темы";
"s_posts" = "Записи";
"s_comments" = "Отзывы";
"s_videos" = "Киноленты";
"s_audios" = "Аудио";
"s_by_people" = "по гражданам";
"s_by_groups" = "по собраниям";
"s_by_posts" = "по записям";
"s_by_comments" = "по отзывам";
"s_by_videos" = "по кинолентам";
"s_by_apps" = "по приложениям";
"s_by_audios" = "по музыке";
"s_order_by" = "Расположение";
"s_order_by_id" = "По номерам";
"s_order_by_name" = "По имени";
"s_order_by_random" = "Наобум";
"s_order_by_rating" = "По соц. рейтингу";
"s_order_invert" = "Отразить";
"s_by_date" = "По дате";
"s_date_before" = "До";
"s_date_after" = "После";
"s_main" = "Паспорт";
"s_now_on_site" = "cейчас доступен";
"s_with_photo" = "с фотокарточкой";
"s_only_in_names" = "только в паспорте";
"s_any" = "любой";
"reset" = "Сброс";
"closed_group_post" = "Эта запись из закрытого собрания";
"deleted_target_comment" = "Этот отзыв надлежит к удалённой записи";

View file

@ -226,6 +226,110 @@ input[type="radio"] {
border-color: #514534; border-color: #514534;
} }
.searchOptions
{
overflow-y: hidden;
overflow-x:hidden;
width:28.8%;
border-top:1px solid #2B2B2B;
float:right;
scrollbar-width: none;
font-size:12px;
background-color:#1e1a2b;
margin-right: -7px;
}
.searchBtn
{
border: solid 1px #484848;
background-color: #333;
color:#c6d2e8;
margin-left: -3px;
padding-bottom:2px;
width:80px;
cursor: pointer;
box-shadow: 0px 2px 0px 0px rgba(111, 111, 111, 0.18) inset;
}
.searchBtn:active
{
border: solid 1px #414141;
background-color: rgb(77, 77, 77);
color:white;
box-shadow: 0px -2px 0px 0px rgba(255, 255, 255, 0.18) inset;
}
.searchList #used
{
margin-left:0px;
color: white;
padding:2px;
padding-top:5px;
padding-bottom:5px;
border: solid 0.125rem #2f2f2f;
background: linear-gradient(#3c3c3c,#393939);
margin-bottom:2px;
padding-left:5px;
width:90%;
}
.searchList #used a
{
color: white;
}
.searchHide
{
padding-right: 5px;
}
.searchList li
{
margin-left:0px;
color: #2B587A !important;
cursor:pointer;
padding:2px;
padding-top:5px;
padding-bottom:5px;
margin-bottom:2px;
padding-left:5px;
}
.searchList li a
{
min-width:100%;
}
.searchList li:hover
{
margin-left:0px;
color: #2B587A !important;
background:#181522;
padding:2px;
padding-top:5px;
padding-bottom:5px;
margin-bottom:2px;
padding-left:5px;
width:91%;
}
.searchOptionName
{
cursor:pointer;
background-color: #120e1f;
padding-left:5px;
padding-top:5px;
padding-bottom:5px;
width: 90%;
font-weight: 600;
color: #c6d2e8;
}
.borderup
{
border-top:1px solid #2f2f2f;
}
#backdropEditor { #backdropEditor {
background-image: url("/themepack/midnight/0.0.2.7/resource/backdrop-editor.gif") !important; background-image: url("/themepack/midnight/0.0.2.7/resource/backdrop-editor.gif") !important;
border-color: #473e66 !important; border-color: #473e66 !important;

View file

@ -245,3 +245,95 @@ input[type=checkbox] {
width:100%; width:100%;
background-color:#3c3c3c background-color:#3c3c3c
} }
.searchOptions
{
overflow-y: hidden;
overflow-x:hidden;
width:28.8%;
border-top:1px solid #2B2B2B;
float:right;
scrollbar-width: none;
font-size:12px;
background-color:#F6F6F6;
margin-right: -7px;
}
.searchBtn
{
border: none;
background-color: #555555;
color:#ffffff;
margin-left: -3px;
padding-bottom:2px;
width:80px;
cursor: pointer;
box-shadow: none;
}
.searchBtn:active
{
border: none;
background-color: rgb(77, 77, 77);
color:white;
box-shadow: none;
}
.searchList #used
{
margin-left:0px;
color: white;
padding:2px;
padding-top:5px;
padding-bottom:5px;
border: none;
background: #a4a4a4;
margin-bottom:2px;
padding-left:5px;
width:90%;
}
.searchList #used a
{
color: white;
}
.searchHide
{
padding-right: 5px;
}
.searchList li:hover
{
margin-left:0px;
color: #2B587A !important;
background:#eeeeee;
padding:2px;
padding-top:5px;
padding-bottom:5px;
margin-bottom:2px;
padding-left:5px;
width:91%;
}
.searchOptionName
{
cursor:pointer;
background-color: #a4a4a4;
padding-left:5px;
padding-top:5px;
padding-bottom:5px;
width: 90%;
font-weight: 600;
color: #fff;
}
.searchOptionName img
{
display:none;
}
.borderup
{
border-top:1px solid #2f2f2f;
}