web: star ratings on the reel, and PICTURES becomes an album browser
The landing strip now carries a score: each look and each contributed frame shows an average, five stars the visitor can press, and how many votes it has. Votes are keyed photo:<id> or look:<TAG> and one visitor has one vote per key, so pressing a second star moves a score instead of stacking one. The API is public and rate-limited; look: scores survive a cleared pool, photo: scores are pruned with their photo. PICTURES was four destination rows; it is now an album per uploader with a search box, a recipe/rating/newest sort, a minimum-star filter, a big preview and a filmstrip of thumbnails. Deleting and slot picking still live in the big box.
This commit is contained in:
@@ -166,7 +166,18 @@ export const en: Dict = {
|
||||
'adm.title': 'Strip moderation',
|
||||
'adm.subtitle': 'Photos contributed by users. Delete one to pull it off the landing page.',
|
||||
'adm.upload': 'ADD A PHOTO',
|
||||
'adm.pool': 'Uploaded photos',
|
||||
'adm.albums': 'User albums',
|
||||
'adm.albumAll': 'All photos',
|
||||
'adm.filterName': 'Filter by user name',
|
||||
'adm.sort': 'Sort',
|
||||
'adm.sortNewest': 'Newest first',
|
||||
'adm.sortRecipe': 'Recipe A→Z',
|
||||
'adm.sortRating': 'Highest rated',
|
||||
'adm.rating': 'Rating',
|
||||
'adm.ratingAll': 'Any rating',
|
||||
'adm.ratingAtLeast': '{n}★ and up',
|
||||
'adm.recipe': 'Recipe',
|
||||
'adm.bigEmpty': 'Pick a thumbnail to view.',
|
||||
'adm.pickStrip': 'Film strip',
|
||||
'adm.pickTester': 'Live preset tester',
|
||||
'adm.pickCreator': 'Custom recipe creator',
|
||||
@@ -201,7 +212,6 @@ export const en: Dict = {
|
||||
'adm.roleMember': 'Member',
|
||||
'adm.viewPhotos': 'VIEW PHOTOS',
|
||||
'adm.noUsers': 'No accounts yet.',
|
||||
'adm.showAll': 'ALL',
|
||||
'adm.profileHint': 'Picture, email and password of the signed-in account. Changing the email or password needs the current password.',
|
||||
'adm.changeAvatar': 'CHANGE PICTURE',
|
||||
'adm.currentPassword': 'Current password',
|
||||
|
||||
@@ -170,7 +170,18 @@ export const vi = {
|
||||
'adm.title': 'Quản trị dải phim',
|
||||
'adm.subtitle': 'Ảnh do người dùng đóng góp. Xoá một ảnh để gỡ nó khỏi trang chủ.',
|
||||
'adm.upload': 'THÊM ẢNH',
|
||||
'adm.pool': 'Ảnh đã tải lên',
|
||||
'adm.albums': 'Album người dùng',
|
||||
'adm.albumAll': 'Tất cả ảnh',
|
||||
'adm.filterName': 'Lọc theo tên người dùng',
|
||||
'adm.sort': 'Sắp xếp',
|
||||
'adm.sortNewest': 'Mới nhất trước',
|
||||
'adm.sortRecipe': 'Công thức A→Z',
|
||||
'adm.sortRating': 'Xếp hạng cao nhất',
|
||||
'adm.rating': 'Xếp hạng',
|
||||
'adm.ratingAll': 'Mọi mức xếp hạng',
|
||||
'adm.ratingAtLeast': 'Từ {n} sao',
|
||||
'adm.recipe': 'Công thức',
|
||||
'adm.bigEmpty': 'Chọn một ảnh để xem.',
|
||||
'adm.pickStrip': 'Dải phim',
|
||||
'adm.pickTester': 'Live preset tester',
|
||||
'adm.pickCreator': 'Custom recipe creator',
|
||||
@@ -205,7 +216,6 @@ export const vi = {
|
||||
'adm.roleMember': 'Thành viên',
|
||||
'adm.viewPhotos': 'XEM ẢNH',
|
||||
'adm.noUsers': 'Chưa có tài khoản nào.',
|
||||
'adm.showAll': 'TẤT CẢ',
|
||||
'adm.profileHint': 'Ảnh đại diện, email và mật khẩu của tài khoản đang đăng nhập. Đổi email hoặc mật khẩu cần mật khẩu hiện tại.',
|
||||
'adm.changeAvatar': 'ĐỔI ẢNH ĐẠI DIỆN',
|
||||
'adm.currentPassword': 'Mật khẩu hiện tại',
|
||||
|
||||
Reference in New Issue
Block a user