diff --git a/public/s/css/f0ck.css b/public/s/css/f0ck.css index 37a467d..95c887b 100644 --- a/public/s/css/f0ck.css +++ b/public/s/css/f0ck.css @@ -294,7 +294,7 @@ html[theme="atmos"] { html[theme="term"] { --accent: #00DF00; - --bg: #040404; + --bg: #000; --black: #000; --white: #fff; --gray: #262626; @@ -333,6 +333,11 @@ html[theme="term"] .metadata { text-shadow: 0px 0px 1px var(--accent), 1px 0px 2px var(--accent), 0px 0px 5px var(--black); } +html[theme="term"] .metadata > .badge-dark, #themeselector { + box-shadow: var(--pagination-anchor-box-shadow); + background-image: linear-gradient(to bottom,var(--nav-link-background-linear-gradient)); +} + html[theme="iced"] { --accent: #0084ff; --bg: #031c35; @@ -359,7 +364,7 @@ html[theme="iced"] { --pagination-anchor-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1); --pagination-background-hover: #0a3f53; --pagination-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5); - --metadata-bg: #111d37; + --metadata-bg: #000e1a; --badge-bg: #091f39; --posts-meta-bg: #000000b8; --badge-sfw: #07866e; @@ -1035,6 +1040,7 @@ span#tags:empty { padding-left: 5px; padding-top: 1.5px; padding-bottom: 1.5px; + box-shadow: var(--pagination-anchor-box-shadow); } .badge-greentext { color: #789922; @@ -1307,6 +1313,7 @@ div#footbar { margin-top: -30px; transition: .2s ease-in-out; user-select: none; + color: transparent; } /* avatar */ @@ -1469,5 +1476,21 @@ table.table tbody tr:nth-of-type(even) { } .timeago:hover { + cursor: pointer; /* absoluter shit */ +} + +/* buttons */ +svg.iconset { + display: inline-block; + height: 14px; + width: 14px; + vertical-align: sub; cursor: pointer; -} \ No newline at end of file +} + +/* favorites */ +span#favs { + text-align: left; + margin-left: 10px; + grid-column: 1/4; +} diff --git a/public/s/img/iconset.svg b/public/s/img/iconset.svg new file mode 100644 index 0000000..498573d --- /dev/null +++ b/public/s/img/iconset.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/s/js/admin.js b/public/s/js/admin.js index 882dddc..2459316 100644 --- a/public/s/js/admin.js +++ b/public/s/js/admin.js @@ -199,10 +199,26 @@ const flash = ({ type, msg }) => { } }; + const toggleFavEvent = async e => { + const res = await (await fetch(`/api/v2/admin/togglefav/${postid}`)).json(); + if(res.success) { + const fav = document.querySelector("svg#a_favo > use").href; + fav.baseVal = '/s/img/iconset.svg#heart_' + (fav.baseVal.match(/heart_(regular|solid)$/)[1] == "solid" ? "regular" : "solid"); + + // span#favs + const favcontainer = document.querySelector('span#favs'); + favcontainer.innerHTML = "favorites:" + JSON.stringify(Object.values(res.favs)); + } + else { + // lul + } + }; + _addtag.addEventListener("click", addtagClick); document.querySelector("a#a_toggle").addEventListener("click", toggleEvent); [...document.querySelectorAll("#tags > .badge > a:last-child")].map(t => t.addEventListener("click", deleteEvent)); - document.querySelector("a#a_delete").addEventListener("click", deleteButtonEvent); + document.querySelector("svg#a_delete").addEventListener("click", deleteButtonEvent); + document.querySelector("svg#a_favo").addEventListener("click", toggleFavEvent); document.addEventListener("keyup", e => { if(e.target.tagName === "INPUT") diff --git a/src/inc/routes/apiv2.mjs b/src/inc/routes/apiv2.mjs index cd1b3d3..f33ba77 100644 --- a/src/inc/routes/apiv2.mjs +++ b/src/inc/routes/apiv2.mjs @@ -190,6 +190,32 @@ export default (router, tpl) => { })}); }); + group.get(/\/admin\/togglefav\/\d+$/, auth, async (req, res) => { + const itemid = +req.url.split[4]; + + let favs = await sql('favorites').select('user_id').where('item_id', itemid); + + if(Object.values(favs).filter(u => u.user_id === req.session.id)[0]) { + // del fav + await sql('favorites').where('user_id', req.session.id).andWhere('item_id', itemid).del(); + } + else { + // add fav + await sql('favorites').insert({ + item_id: itemid, + user_id: req.session.id + }); + } + + favs = await sql('favorites').select('user_id').where('item_id', itemid); + + res.reply({ body: JSON.stringify({ + success: true, + itemid: itemid, + favs: favs + })}); + }); + }); return router; diff --git a/src/inc/routes/inc/f0cklib.mjs b/src/inc/routes/inc/f0cklib.mjs index 15c88a7..2989755 100644 --- a/src/inc/routes/inc/f0cklib.mjs +++ b/src/inc/routes/inc/f0cklib.mjs @@ -136,7 +136,10 @@ export default { }; } - let items = sql("items").select("*").orderBy("items.id", "desc").whereRaw(modequery); + let items = sql("items") + .select("*") + .orderBy("items.id", "desc") + .whereRaw(modequery); if(tag) { items = items.innerJoin( @@ -169,6 +172,11 @@ export default { const tags = await lib.getTags(itemid); const cheat = items.slice(Math.max(0, item - 3), item + 4).map(i => i.id); const link = lib.genLink({ user, tag, mime, act_page: itemid }); + const favorites = await sql('favorites') + .select('user.user', 'user_options.avatar') + .leftJoin('user', 'user.id', 'favorites.user_id') + .leftJoin('user_options', 'user_options.user_id', 'favorites.user_id') + .where('favorites.item_id', itemid); const data = { success: true, @@ -192,6 +200,7 @@ export default { timeago: lib.timeAgo(new Date(actitem.stamp * 1e3).toISOString()), timefull: new Date(actitem.stamp * 1e3).toISOString() }, + favorites: favorites, tags: tags }, title: `${actitem.id} - f0ck.me`, @@ -204,8 +213,8 @@ export default { cheat: cheat, uff: true }, - link: link, phrase: cfg.websrv.phrases[~~(Math.random() * cfg.websrv.phrases.length)], + link: link, tmp: tmp }; return data; diff --git a/src/index.mjs b/src/index.mjs index 7092f7b..1228999 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -65,7 +65,7 @@ import flummpress from "flummpress"; if(req.cookies.session) { const user = await sql("user_sessions") // get user - .select("user.id", "user.login", "user.user", "user.level", "user_sessions.id as sess_id", "user_options.mode", "user_options.theme") + .select("user.id", "user.login", "user.user", "user.level", "user_sessions.id as sess_id", "user_options.mode", "user_options.theme", "user_options.avatar") .where("user_sessions.session", lib.md5(req.cookies.session)) .leftJoin("user", "user.id", "user_sessions.user_id") .leftJoin("user_options", "user_options.user_id", "user_sessions.user_id") diff --git a/views/item.html b/views/item.html index aab1e94..d8dad20 100644 --- a/views/item.html +++ b/views/item.html @@ -45,7 +45,12 @@
- {{ item.id }}@if(session) ({{ user.name }}) @endif + {{ item.id }} + @if(session) + ({{ user.name }}) + + + @endif {{ user.network }} / {{ user.channel }} @@ -62,7 +67,7 @@ @if(typeof item.tags !== "undefined") @each(item.tags as tag) - {!! tag.tag !!}@if(session) ×@endif + {!! tag.tag !!}@if(session) ×@endif @endeach @endif @@ -70,6 +75,15 @@ add tag - toggle @endif + + @if(item.favorites.length && session) + favorites: + @each(item.favorites as fav) + + @endeach + bimde designe mich + @endif +
@include(snippets/footer) \ No newline at end of file diff --git a/views/snippets/navbar.html b/views/snippets/navbar.html index 86b6bba..8aeaa84 100644 --- a/views/snippets/navbar.html +++ b/views/snippets/navbar.html @@ -5,11 +5,12 @@