Merge pull request 'fixed issues with the random button and hotkeys' (#2) from eins/f0bm:f0bm into f0bm
Reviewed-on: #2
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,3 +8,4 @@ deleted/b
|
||||
deleted/ca
|
||||
deleted/t
|
||||
tmp/*
|
||||
tools
|
||||
@@ -130,12 +130,12 @@
|
||||
return false;
|
||||
}
|
||||
renderTags(res.tags);
|
||||
span.parentElement.removeChild(span);
|
||||
if (span.parentElement) span.parentElement.removeChild(span);
|
||||
testList.innerText = "";
|
||||
addtagClick();
|
||||
}
|
||||
else if (e.key === "Escape") {
|
||||
span.parentElement.removeChild(span);
|
||||
if (span.parentElement) span.parentElement.removeChild(span);
|
||||
testList.innerText = "";
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -140,7 +140,7 @@ window.requestAnimFrame = (function () {
|
||||
html = rawText;
|
||||
}
|
||||
|
||||
let container = document.querySelector('.container');
|
||||
let container = document.querySelector('#main .container');
|
||||
|
||||
if (!container && document.querySelector('.index-container')) {
|
||||
// Transition from Index to Item View
|
||||
@@ -148,6 +148,11 @@ window.requestAnimFrame = (function () {
|
||||
main.innerHTML = '<div class="container"></div>';
|
||||
container = main.querySelector('.container');
|
||||
} else if (container) {
|
||||
// Check if we are on Tags Overview logic (which reuses .container)
|
||||
const tagsOverview = container.querySelector('.tags');
|
||||
if (tagsOverview) {
|
||||
container.innerHTML = '';
|
||||
} else {
|
||||
// Already in Item View, clear usage
|
||||
const oldContent = container.querySelector('.content');
|
||||
const oldMetadata = container.querySelector('.metadata');
|
||||
@@ -156,6 +161,7 @@ window.requestAnimFrame = (function () {
|
||||
if (oldContent) oldContent.remove();
|
||||
if (oldMetadata) oldMetadata.remove();
|
||||
}
|
||||
}
|
||||
|
||||
container.insertAdjacentHTML('beforeend', html);
|
||||
|
||||
@@ -187,13 +193,12 @@ window.requestAnimFrame = (function () {
|
||||
};
|
||||
|
||||
const changePage = (e, pbwork = true) => {
|
||||
if (e.tagName === 'A') {
|
||||
e.preventDefault();
|
||||
loadItemAjax(e.href);
|
||||
} else {
|
||||
pbwork && document.querySelector("nav.navbar").classList.add("pbwork");
|
||||
!tt && (tt = setTimeout(() => e.click(), stimeout));
|
||||
if (pbwork) {
|
||||
const nav = document.querySelector("nav.navbar");
|
||||
if (nav) nav.classList.add("pbwork");
|
||||
}
|
||||
// Trigger native click for navigation
|
||||
e.click();
|
||||
};
|
||||
|
||||
// Intercept clicks
|
||||
@@ -208,10 +213,10 @@ window.requestAnimFrame = (function () {
|
||||
return;
|
||||
}
|
||||
|
||||
const link = e.target.closest('#next, #prev, #random, .id-link, .nav-next, .nav-prev');
|
||||
const link = e.target.closest('#next, #prev, #random, #nav-random, .id-link, .nav-next, .nav-prev');
|
||||
if (link && link.href && link.hostname === window.location.hostname && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) {
|
||||
// Special check for random
|
||||
if (link.id === 'random') {
|
||||
if (link.id === 'random' || link.id === 'nav-random') {
|
||||
e.preventDefault();
|
||||
const nav = document.querySelector("nav.navbar");
|
||||
if (nav) nav.classList.add("pbwork");
|
||||
@@ -240,7 +245,10 @@ window.requestAnimFrame = (function () {
|
||||
window.location.href = link.href;
|
||||
}
|
||||
})
|
||||
.catch(() => window.location.href = link.href);
|
||||
.catch((err) => {
|
||||
console.error("Random fetch failed:", err);
|
||||
window.location.href = link.href;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -261,7 +269,7 @@ window.requestAnimFrame = (function () {
|
||||
"a": clickOnElementBinding("#next"),
|
||||
"ArrowRight": clickOnElementBinding("#prev"),
|
||||
"d": clickOnElementBinding("#prev"),
|
||||
"r": clickOnElementBinding("#random"),
|
||||
"r": clickOnElementBinding("#random, #nav-random"),
|
||||
" ": clickOnElementBinding("#f0ck-image")
|
||||
};
|
||||
document.addEventListener("keydown", e => {
|
||||
@@ -541,10 +549,13 @@ function init() {
|
||||
|
||||
window.addEventListener('load', init);
|
||||
|
||||
document.getElementById('sbtForm').addEventListener('submit', (e) => {
|
||||
const sbtForm = document.getElementById('sbtForm');
|
||||
if (sbtForm) {
|
||||
sbtForm.addEventListener('submit', (e) => {
|
||||
e.preventDefault();
|
||||
const input = document.getElementById('sbtInput').value.trim();
|
||||
if (input) {
|
||||
window.location.href = `/tag/${encodeURIComponent(input)}`;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ const Cookie = {
|
||||
(() => {
|
||||
const acttheme = Cookie.get('theme') ?? "w0bm";
|
||||
const themecontainer = document.querySelector("li#themes > ul.dropdown-menu");
|
||||
|
||||
if (!themecontainer) return; // Theme menu not present on this page
|
||||
|
||||
const themes = [...themecontainer.querySelectorAll("li > a")].map(t => t.innerText.toLowerCase());
|
||||
if (acttheme !== document.documentElement.getAttribute("theme") && themes.includes(acttheme))
|
||||
document.documentElement.setAttribute("theme", acttheme);
|
||||
|
||||
@@ -13,14 +13,18 @@ export default router => {
|
||||
group.get(/\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => {
|
||||
const user = req.url.split[3] === "user" ? req.url.split[4] : "%";
|
||||
const mime = (allowedMimes.filter(n => req.url.split[3]?.startsWith(n))[0] ? req.url.split[3] : "") + "%";
|
||||
const tag = req.url.qs.tag || null;
|
||||
|
||||
const rows = await db`
|
||||
select *
|
||||
select "items".*
|
||||
from "items"
|
||||
left join tags_assign on tags_assign.item_id = items.id
|
||||
left join tags on tags.id = tags_assign.tag_id
|
||||
where
|
||||
mime ilike ${mime} and
|
||||
username ilike ${user} and
|
||||
active = 'true'
|
||||
${tag ? db`and tags.normalized ilike ${'%' + tag + '%'}` : db``}
|
||||
order by random()
|
||||
limit 1
|
||||
`;
|
||||
@@ -51,15 +55,13 @@ export default router => {
|
||||
where
|
||||
${db.unsafe(modequery)} and
|
||||
active = 'true'
|
||||
${
|
||||
opt.older
|
||||
${opt.older
|
||||
? db`and id <= ${opt.older}`
|
||||
: opt.newer
|
||||
? db`and id >= ${opt.newer}`
|
||||
: db``
|
||||
}
|
||||
order by id ${
|
||||
opt.newer
|
||||
order by id ${opt.newer
|
||||
? db`asc`
|
||||
: db`desc`
|
||||
}
|
||||
@@ -175,8 +177,7 @@ export default router => {
|
||||
}
|
||||
|
||||
const q = (await db`
|
||||
update "tags" set ${
|
||||
db({
|
||||
update "tags" set ${db({
|
||||
tag: newtag
|
||||
}, 'tag')
|
||||
}
|
||||
@@ -287,8 +288,7 @@ export default router => {
|
||||
else {
|
||||
// add fav
|
||||
await db`
|
||||
insert into "favorites" ${
|
||||
db({
|
||||
insert into "favorites" ${db({
|
||||
item_id: +postid,
|
||||
user_id: +req.session.id
|
||||
}, 'item_id', 'user_id')
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<a href="/tags">tags</a>
|
||||
<a href="/about">about</a>
|
||||
@if(!/^\/\d$/.test(url.pathname))
|
||||
<a href="/random">rand</a>
|
||||
<a href="/random" id="nav-random">rand</a>
|
||||
@endif
|
||||
</ol>
|
||||
</div>
|
||||
@@ -33,7 +33,7 @@
|
||||
<a href="/tags">tags</a>
|
||||
<a href="/about">about</a>
|
||||
@if(!/^\/\d$/.test(url.pathname))
|
||||
<a href="/random">rand</a>
|
||||
<a href="/random" id="nav-random">rand</a>
|
||||
@endif
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user