onara
This commit is contained in:
@@ -408,6 +408,105 @@ export default (router, tpl) => {
|
||||
return res.reply({ body });
|
||||
}
|
||||
|
||||
const isOnara = !!(cfg.onara !== undefined ? cfg.onara : cfg.websrv?.onara);
|
||||
if (mode === 'item' && isOnara) {
|
||||
const itemHtml = tpl.render('ajax-item', data, req);
|
||||
|
||||
const isRandom = req.cookies.random_mode === '1';
|
||||
let itemPage = 1;
|
||||
if (req.params.page) {
|
||||
itemPage = parseInt(req.params.page, 10) || 1;
|
||||
} else if (!isRandom && data.item) {
|
||||
try {
|
||||
itemPage = await f0cklib.getItemPage({
|
||||
targetItemId: data.item.id,
|
||||
targetItemPinned: data.item.is_pinned,
|
||||
user: req.params.user,
|
||||
tag: reqTag,
|
||||
mime: req.cookies.mime !== undefined ? req.cookies.mime : (req.query?.mime || req.url.qs?.mime || req.params.mime || null),
|
||||
hall: req.params.hall,
|
||||
fav: req.params.mode == 'favs',
|
||||
mode: req.mode,
|
||||
ratings: (() => { if (req.mode === 2 || req.mode === 3) return null; const r = req.cookies.ratings; return r ? decodeURIComponent(r).split(/[|,]/).filter(x => ['sfw','nsfw','nsfl','untagged'].includes(x)) : null; })(),
|
||||
session: req.session,
|
||||
user_id: req.session?.id,
|
||||
is_admin: req.session?.admin,
|
||||
exclude: req.session ? (req.session.excluded_tags || []) : [],
|
||||
strict: !!(req.query?.strict || req.url.qs?.strict || req.session?.strict_mode),
|
||||
minXdScore: req.url.qs?.min_xd !== undefined ? +req.url.qs.min_xd : (req.session?.min_xd_score || 0),
|
||||
tagger: req.url.qs?.tagger || null
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('[ONARA] getItemPage error:', err);
|
||||
itemPage = 1;
|
||||
}
|
||||
}
|
||||
|
||||
let gridData = await f0cklib.getf0cks({
|
||||
user: req.params.user,
|
||||
tag: reqTag,
|
||||
mime: req.cookies.mime !== undefined ? req.cookies.mime : (req.query?.mime || req.url.qs?.mime || req.params.mime || null),
|
||||
page: itemPage,
|
||||
hall: req.params.hall,
|
||||
fav: req.params.mode == 'favs',
|
||||
mode: req.mode,
|
||||
ratings: (() => { if (req.mode === 2 || req.mode === 3) return null; const r = req.cookies.ratings; return r ? decodeURIComponent(r).split(/[|,]/).filter(x => ['sfw','nsfw','nsfl','untagged'].includes(x)) : null; })(),
|
||||
session: req.session,
|
||||
user_id: req.session?.id,
|
||||
is_admin: req.session?.admin,
|
||||
exclude: req.session ? (req.session.excluded_tags || []) : [],
|
||||
url: decodeURIComponent(req.url.pathname || req.url),
|
||||
strict: !!(req.query?.strict || req.url.qs?.strict || req.session?.strict_mode),
|
||||
explicitStrict: !!(req.query?.strict || req.url.qs?.strict),
|
||||
random: isRandom,
|
||||
minXdScore: req.url.qs?.min_xd !== undefined ? +req.url.qs.min_xd : (req.session?.min_xd_score || 0),
|
||||
lang: req.lang,
|
||||
tagger: req.url.qs?.tagger || null
|
||||
});
|
||||
|
||||
if (!gridData || !gridData.success) {
|
||||
gridData = {
|
||||
items: [],
|
||||
pagination: { start: 1, end: 1, current: 1, page: 1, cheat: [1], prev: null, next: null },
|
||||
total: 0,
|
||||
success: true,
|
||||
link: { main: '/', path: 'p/', suffix: '' },
|
||||
tmp: {}
|
||||
};
|
||||
}
|
||||
|
||||
const activeId = data.item ? data.item.id : req.params.itemid;
|
||||
const activeSlug = data.item ? data.item.slug : null;
|
||||
|
||||
// Mark the active item in the grid for instant highlight
|
||||
let foundInGrid = false;
|
||||
if (Array.isArray(gridData.items)) {
|
||||
for (const it of gridData.items) {
|
||||
if ((activeSlug && it.slug === activeSlug) || (it.id === activeId)) {
|
||||
it.is_onara_active = true;
|
||||
foundInGrid = true;
|
||||
} else {
|
||||
it.is_onara_active = false;
|
||||
}
|
||||
}
|
||||
// If not in first page of feed, unshift it so thumbnail is present in background
|
||||
if (!foundInGrid && data.item) {
|
||||
gridData.items.unshift({ ...data.item, is_onara_active: true });
|
||||
}
|
||||
}
|
||||
|
||||
gridData.session = data.session;
|
||||
gridData.is_onara_item = true;
|
||||
gridData.onara_item_html = itemHtml;
|
||||
gridData.item = data.item;
|
||||
gridData.page_meta = data.page_meta;
|
||||
gridData.hidePagination = false;
|
||||
|
||||
const body = tpl.render('index', gridData, req);
|
||||
console.log(`[${new Date().toISOString()}] [ROUTE] Render complete (onara direct item) in ${Date.now() - tRenderStart}ms. Total route time: ${Date.now() - tRouteStart}ms`);
|
||||
return res.reply({ body });
|
||||
}
|
||||
|
||||
const body = tpl.render(mode, data, req);
|
||||
console.log(`[${new Date().toISOString()}] [ROUTE] Render complete in ${Date.now() - tRenderStart}ms. Total route time: ${Date.now() - tRouteStart}ms`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user