Закреплённый топик для ссылок на фичреквесты. Сюда можно писать свою идею, я заведу отдельный топик для обсуждений и добавлю в шапку.
✅ https://linuxtalks.co/forum/linuxtalks-co/36
https://linuxtalks.co/forum/linuxtalks-co/38
✅ https://linuxtalks.co/forum/linuxtalks-co/40
✅https://linuxtalks.co/forum/linuxtalks-co/42
https://linuxtalks.co/forum/linuxtalks-co/43
✅ https://linuxtalks.co/forum/linuxtalks-co/49
✅ https://linuxtalks.co/forum/linuxtalks-co/79
https://linuxtalks.co/forum/linuxtalks-co/60
https://linuxtalks.co/forum/linuxtalks-co/90
https://linuxtalks.co/forum/linuxtalks-co/112
✅ картинки в маркдауне
https://linuxtalks.co/forum/feedback/411
✅ https://linuxtalks.co/forum/feedback/416?lastmod=1654255613198

хз. бери гитхаб, присылай патч.
Регистрировать новый аккаунт на GitHub не охота, поэтому отправлю патч тут.
https://github.com/cocucka-dev/lorsource/blob/master/src/main/java/ru/org/linux/user/User.java:
@@ -30,6 +30,9 @@ import java.sql.SQLException; import java.sql.Timestamp; +import java.util.ArrayDeque; +import java.util.Deque; + public class User implements Serializable { private static final int ANONYMOUS_LEVEL_SCORE = 50; public static final int ANONYMOUS_ID = 2; @@ -278,37 +281,41 @@ return getStars(score, maxScore, true); } - private static int getGreenStars(int score) { - if (score < 0) { - score = 0; + private static int getStarCount(int score) { + int stars = 0; + int n; + + Deque<Integer> d = new ArrayDeque<Integer>(); + d.add(1); + d.add(1); + d.add(1); + + for(;;) { + if (stars < d.size()) { + n = (int) d.toArray()[stars]; + } else { + n = d.pollLast() + d.peekLast(); + d.addFirst(n); + } + score = score - n*100; + if (score < 0) { + break; + } + stars = stars + 1; } -/* if (score >= 600) { - score = 599; - }*/ - - return (int) Math.floor(score / 100.0); - } - - private static int getGreyStars(int score, int maxScore) { - if (maxScore < 0) { - maxScore = 0; - } - if (maxScore < score) { - maxScore = score; - } -/* if (maxScore >= 600) { - maxScore = 599; - }*/ - - int stars = getGreenStars(score); - return (int) Math.floor(maxScore / 100.0) - stars; + return stars; } public static String getStars(int score, int maxScore, boolean html) { StringBuilder out = new StringBuilder(); - int stars = getGreenStars(score); - int greyStars = getGreyStars(score, maxScore); + int stars = getStarCount(score); + int greyStars; + if (maxScore == score) { + greyStars = 0; + } else { + greyStars = getStarCount(maxScore) - stars; + } if (html) { out.append("<span class=\"stars\">");@cocucka, что скажешь? Предлагаю вернуть звёзды на изначальное место и изменить систему расчёта их количества на вышеописанную.
Вот у @cetjs2 должно быть 22 звезды, а вы ему только 11 насыпали. Видимо, потому, что даже если звёзды передвинуть под ник, то всё равно 22 штуки многовато. А по моему алгоритму у него будет 8 звёзд. Заодно четырёхзвёздочники перестанут быть краснокнижными существами.
По мне так чем проще – тем лучше. Линейный рост, имхо, меньше вопросов вызовет, но и более 5 звёзд у ника даёт ощущение разговора с Брежневым. Может лучше сделать звёзды разноцветными? Типа до 500 простые зелёные, за 5 зелёных давать одну серебрянную, за 5 серебрянных – золотую. Не каждая птица долетит до пяти золотых.
А за 5 золотых - библию в простом переплёте.
По-моему, начисление score уже достаточно нетривиально, чтобы вызывать вопросы у тех, кто пытается понять, как оно работает. Собственно, я вообще считаю, что пользователям достаточно просто знать, что чем больше звёзд, тем дольше будешь добираться до следующей — понимать механизм работы необязательно. В профиле рядом со score отображать количество, при котором появится следующая звезда. Т. е., например, 350 / 500. (При наведении на 500 показывать поясняющую надпись.) Любителям “игоря” такой принцип должен быть вполне знаком. Для любознательных где-нибудь на FAQ-странице привести вышеуказанную таблицу и описание алгоритма. Если что, я лично готов объяснять, как оно работает, всем, у кого возникнут вопросы.
Мне такая идея не очень нравится, обилие цветов слишком перегружает информационный фон. Всё-таки цвета лучше использовать для выделения информации, а не как отдельную смысловую единицу. (Тут ещё стоит учитывать существование разных тем и пользовательских стилей.)
Ещё неплохо бы время написания сообщения перенести в ту же строчку, что и user-agent (с тем же размером шрифта):
sudopacman ★★★★★★ <тут может быть комментарий о пользователе> Последнее исправление: sudopacman 14.06.22 20:01:06 (всего исправлений: 2) Windows / Firefox / 14.06.22 19:51:48 [Ответить на это сообщение] [Показать ответ] [Ссылка]