NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Studosi React Count
// @namespace https://forum.studosi.net/
// @version 1.0
// @description Show users reacting to posts
// @author njofra, Amali
// @match https://forum.studosi.net/*
// @grant none
// @license MIT
// ==/UserScript==
const pairings = {
'laugh': 'LOL',
'no_mouth': 'Wtf?',
'cry': 'Tugy',
}
function get_username(user_id, source) {
// neki useri se ne mogu dohvatiti jer nisu lokalno cacheani
//console.log(user_id, source)
let user = Object.values(flarum.core.app.store.data.users).find(u => u.data.id == user_id)
if (!user) return "ID: " + user_id
return user.data.attributes.displayName
}
function get_reactions() {
const reactions = []
Object.values(flarum.core.app.store.data.reactions).map(r => r.data.attributes).forEach(r => {
reactions[r.post_id] = reactions[r.post_id] || {}
reactions[r.post_id][r.identifier] = reactions[r.post_id][r.identifier] || []
reactions[r.post_id][r.identifier].push(get_username(r.user_id, "reacts"))
})
return reactions
}
function format_reactions(reactions_json, reaction_name) {
let formatted_reactions = pairings[reaction_name] + "\n-----\n"
for (let user of reactions_json[reaction_name]) {
formatted_reactions += "" + user + "\n"
}
return formatted_reactions
}
function format_votes(post_rel) {
const post_uv = post_rel.upvotes.data
const post_dv = post_rel.downvotes.data
let formatted_votes = ''
if(post_uv.length > 0){
formatted_votes += 'Upvotes:\n'
for(let vote of post_uv){
formatted_votes += '\t' + get_username(vote.id, "upvotes") + '\n'
}
}
if(post_dv.length > 0){
formatted_votes += '\nDownvotes:\n'
for(let vote of post_dv){
formatted_votes += '\t' + get_username(vote.id, "downvotes") + '\n'
}
}
if(formatted_votes.length === 0){
return 'No votes'
}
return formatted_votes
}
function add_reactions() {
let reactions = get_reactions()
const posts = document.getElementsByClassName("PostStream-item")
// console.log(flarum.core.app.forum.store)
const post_votes = flarum.core.app.forum.store.data.posts
for (let post of posts) {
let id = post.getAttribute("data-id")
// ignorira postove bez reactova
if (id in reactions){
// fetch buttona koji predstavljaju emojije reactova
const buttons = post.getElementsByClassName("emoji button-emoji")
// svaki emoji ima samo svoje reactove popisane
for (let button of buttons) {
button.title = format_reactions(reactions[post.getAttribute("data-id")], button.alt)
}
}
if(post_votes[parseInt(id)] !== undefined){
const points = post.getElementsByClassName("item-points")[0]
points.title = format_votes(post_votes[parseInt(id)].data.relationships)
}
}
}
add_reactions()
window.setInterval(add_reactions, 2000);