search lol
This commit is contained in:
parent
2162f1565c
commit
f5737e6f49
|
@ -476,6 +476,11 @@ html, body {
|
|||
font-size: 14px;
|
||||
height: 100%;
|
||||
}
|
||||
@supports (-moz-appearance:none) {
|
||||
html, body {
|
||||
height: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
.noscript-badge {
|
||||
display: block;
|
||||
|
@ -571,6 +576,7 @@ div#posts > a:hover::after {
|
|||
}
|
||||
|
||||
.navbar {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
padding: 0;
|
||||
|
@ -1533,7 +1539,6 @@ table.table {
|
|||
min-width: max-content;
|
||||
}
|
||||
table.table thead tr {
|
||||
text-align: left;
|
||||
font-weight: bolder;
|
||||
border-bottom: 1px solid var(--accent);
|
||||
}
|
||||
|
@ -1542,6 +1547,7 @@ table.table tr {
|
|||
}
|
||||
table.table th, table.table td {
|
||||
padding: 7px 15px;
|
||||
text-align: center;
|
||||
}
|
||||
table.table tbody tr:nth-of-type(odd) {
|
||||
background-color: var(--badge-tag);
|
||||
|
|
|
@ -2,41 +2,92 @@ import db from "../sql.mjs";
|
|||
import lib from "../lib.mjs";
|
||||
import search from "../routeinc/search.mjs";
|
||||
|
||||
const _eps = 20;
|
||||
|
||||
export default (router, tpl) => {
|
||||
router.get(/^\/search(\/)?$/, lib.auth, async (req, res) => {
|
||||
let ret;
|
||||
let tag = req.url.qs?.tag;
|
||||
if(Object.keys(req.url.qs).length > 0) {
|
||||
let rows;
|
||||
let tag = req.url.qs.tag ?? [];
|
||||
let page = req.url.qs.page ?? 1;
|
||||
let total = 0;
|
||||
let pagination, link;
|
||||
|
||||
if(tag.length > 1) {
|
||||
if(tag.startsWith('src:')) {
|
||||
total = (await db`
|
||||
select count(*) as total
|
||||
from "items"
|
||||
where src ilike ${'%' + tag.substring(4) + '%'}
|
||||
group by "items".id, "tags".tag
|
||||
`).length;
|
||||
}
|
||||
else {
|
||||
total = (await db`
|
||||
select count(*) as total
|
||||
from "tags"
|
||||
left join "tags_assign" on "tags_assign".tag_id = "tags".id
|
||||
left join "items" on "items".id = "tags_assign".item_id
|
||||
where "tags".tag ilike ${'%' + tag + '%'}
|
||||
group by "items".id, "tags".tag
|
||||
`).length;
|
||||
}
|
||||
|
||||
const pages = +Math.ceil(total / _eps);
|
||||
const act_page = Math.min(pages, page || 1);
|
||||
const offset = Math.max(0, (act_page - 1) * _eps);
|
||||
|
||||
if(tag.startsWith('src:')) {
|
||||
tag = tag.substring(4);
|
||||
ret = await db`
|
||||
select *
|
||||
from "items"
|
||||
where src ilike ${'%' + tag + '%'}
|
||||
limit 500
|
||||
where src ilike ${'%' + tag.substring(4) + '%'}
|
||||
group by "items".id, "tags".tag
|
||||
offset ${offset}
|
||||
limit ${_eps}
|
||||
`;
|
||||
}
|
||||
else {
|
||||
rows = await db`
|
||||
const rows = await db`
|
||||
select "items".id, "items".username, "items".mime, "tags".tag
|
||||
from "tags"
|
||||
left join "tags_assign" on "tags_assign".tag_id = "tags".id
|
||||
left join "items" on "items".id = "tags_assign".item_id
|
||||
where "tags".tag ilike ${'%' + tag + '%'}
|
||||
limit 500
|
||||
group by "items".id, "tags".tag
|
||||
offset ${offset}
|
||||
limit ${_eps}
|
||||
`;
|
||||
ret = search(rows, tag);
|
||||
}
|
||||
|
||||
const cheat = [];
|
||||
for(let i = Math.max(1, act_page - 3); i <= Math.min(act_page + 3, pages); i++)
|
||||
cheat.push(i);
|
||||
|
||||
pagination = {
|
||||
start: 1,
|
||||
end: pages,
|
||||
prev: (act_page > 1) ? act_page - 1 : null,
|
||||
next: (act_page < pages) ? act_page + 1 : null,
|
||||
page: act_page,
|
||||
cheat: cheat,
|
||||
uff: false
|
||||
};
|
||||
link = {
|
||||
main: `/search/?tag=${tag}`,
|
||||
path: '&page='
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
res.reply({
|
||||
body: tpl.render("search", {
|
||||
result: ret,
|
||||
totals: await lib.countf0cks(),
|
||||
searchstring: tag,
|
||||
tmp: null
|
||||
count: total,
|
||||
tmp: null,
|
||||
pagination,
|
||||
link
|
||||
}, req)
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,26 +5,30 @@
|
|||
</form>
|
||||
<div class="results">
|
||||
@if(result)
|
||||
<h1>{{ result.length }} f0cks given:</h1>
|
||||
<table style="width: 100%;" class="table">
|
||||
<tr>
|
||||
<th>Thumbnail</th>
|
||||
<th>ID</th>
|
||||
<th>Tag</th>
|
||||
<th>Mime</th>
|
||||
<th>Username</th>
|
||||
<th>Score</th>
|
||||
</tr>
|
||||
<h1>{{ count }} f0cks given (page {{ pagination.page }} of {{ pagination.end }}):</h1>
|
||||
<table style="width: 100%" class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Thumbnail</th>
|
||||
<th>ID</th>
|
||||
<th>Tag</th>
|
||||
<th>Mime</th>
|
||||
<th>Username</th>
|
||||
<th>Score</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@each(result as line)
|
||||
<tr>
|
||||
<td style="width: 128px;"><a href="/tag/{!! line.tag !!}/{{ line.id }}" target="_blank"><img src="/t/{{ line.id }}.webp" /></a></td>
|
||||
<td style="text-align: center;"><a href="/tag/{!! line.tag !!}/{{ line.id }}" target="_blank">{{ line.id }}</a></td>
|
||||
<td style="text-align: center;"><a href="/tag/{!! line.tag !!}">{!! line.tag !!}</a></td>
|
||||
<td style="text-align: center;">{{ line.mime }}</td>
|
||||
<td style="text-align: center;"><a href="/user/{!! line.username !!}/f0cks/{{ line.id }}">{!! line.username !!}</a></td>
|
||||
<td style="text-align: center;">{{ line.score.toFixed(2) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 128px;"><a href="/tag/{!! line.tag !!}/{{ line.id }}" target="_blank"><img src="/t/{{ line.id }}.webp" /></a></td>
|
||||
<td><a href="/tag/{!! line.tag !!}/{{ line.id }}" target="_blank">{{ line.id }}</a></td>
|
||||
<td><a href="/tag/{!! line.tag !!}">{!! line.tag !!}</a></td>
|
||||
<td>{{ line.mime }}</td>
|
||||
<td><a href="/user/{!! line.username !!}/f0cks/{{ line.id }}">{!! line.username !!}</a></td>
|
||||
<td>{{ line.score.toFixed(2) }}</td>
|
||||
</tr>
|
||||
@endeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue
Block a user