website/pkg/config/enum.go

295 lines
6.3 KiB
Go
Raw Normal View History

package config
import "regexp"
// Various hard-coded enums such as choice of gender, sexuality, relationship status etc.
var (
MaritalStatus = []string{
"Single",
"Married",
"In a relationship",
"It's complicated",
"Divorced",
"Widowed",
"Widower",
}
RelationshipType = []string{
"Monogamous",
"Open",
}
Gender = []string{
"Man",
"Woman",
"Non-binary",
"Trans",
"Trans (FTM)",
"Trans (MTF)",
"Other",
}
Orientation = []string{
"Straight",
"Gay",
"Bisexual",
"Bicurious",
2024-02-09 05:19:20 +00:00
"Pansexual",
"Asexual",
}
HereFor = []string{
2023-08-30 03:40:23 +00:00
"Dating", "Relationship", "Platonic friends",
"Networking", "Casual acquaintances", "Hookups",
"Chat room", "Forums", "Galleries",
"Exhibitionism", "Voyeurism", "Couch surfing",
}
// Enums all wrapped up for template use.
ProfileEnums = map[string][]string{
"MaritalStatus": MaritalStatus,
"RelationshipType": RelationshipType,
"Gender": Gender,
"Orientation": Orientation,
"HereFor": HereFor,
}
// Input field names for profile fields.
ProfileFields = []string{
"gender",
"pronouns",
"city",
"job",
"orientation",
"marital_status",
"relationship_type",
"about_me",
"interests",
"music_movies",
"hide_age",
}
EssayProfileFields = []string{
"about_me",
"interests",
"music_movies",
}
// Site preference names (stored in ProfileField table)
SitePreferenceFields = []string{
"dm_privacy",
"blur_explicit",
"site_gallery_default", // default view on site gallery (friends-only or all certified?)
"chat_moderation_rules",
}
2024-11-24 07:49:29 +00:00
// Website theme color hue choices.
WebsiteThemeHueChoices = []OptGroup{
2024-11-24 07:49:29 +00:00
{
Header: "Custom Themes",
Options: []Option{
{
Label: "Default (no added color; classic nonshy theme)",
Value: "",
},
{
Label: "nonshy blue & pink",
Value: "blue-pink",
},
},
2024-11-24 07:49:29 +00:00
},
{
Header: "Just a Splash of Color",
Options: []Option{
{
Label: "Burnt red",
Value: "red",
},
{
Label: "Harvest orange",
Value: "orange",
},
{
Label: "Golden yellow",
Value: "yellow",
},
{
Label: "Leafy green",
Value: "green",
},
{
Label: "Cool blue",
Value: "blue",
},
{
Label: "Pretty in pink",
Value: "pink",
},
{
Label: "Royal purple",
Value: "purple",
},
},
2024-11-24 07:49:29 +00:00
},
}
// Choices for the Contact Us subject
2024-11-24 07:49:29 +00:00
ContactUsChoices = []OptGroup{
{
Header: "Website Feedback",
Options: []Option{
{"feedback", "Website feedback"},
{"feature", "Make a feature request"},
{"bug", "Report a bug or broken feature"},
{"other", "General/miscellaneous/other"},
},
},
{
Header: "Report a Problem",
Options: []Option{
{"report.user", "Report a problematic user"},
{"report.photo", "Report a problematic photo"},
{"report.message", "Report a direct message conversation"},
{"report.comment", "Report a forum post or comment"},
{"report.forum", "Report a forum or community"},
{"forum.adopt", "Adopt a forum"},
},
},
}
// Default forum categories for forum landing page.
ForumCategories = []string{
"Rules and Announcements",
"Nudists",
"Exhibitionists",
"Photo Boards",
"Anything Goes",
}
// Forum Poll expiration options.
PollExpires = []Option{
{
Label: "Never",
Value: "0",
},
{
Label: "1 Day",
Value: "1",
},
{
Label: "2 Days",
Value: "2",
},
{
Label: "3 Days",
Value: "3",
},
{
Label: "4 Days",
Value: "4",
},
{
Label: "5 Days",
Value: "5",
},
{
Label: "6 Days",
Value: "6",
},
{
Label: "7 Days",
Value: "7",
},
{
Label: "2 Weeks",
Value: "14",
},
{
Label: "1 Month (30 days)",
Value: "30",
},
}
// Keywords that appear in a DM that make it likely spam.
DirectMessageSpamKeywords = []*regexp.Regexp{
regexp.MustCompile(`\b(telegram|whats\s*app|signal|kik|session)\b`),
regexp.MustCompile(`https?://(t.me|join.skype.com|zoom.us|whereby.com|meet.jit.si|wa.me)`),
}
// Chat Moderation Rules.
ChatModerationRules = []ChecklistOption{
{
Value: "redcam",
Label: "Red camera",
Help: "The user's camera is forced to 'explicit' when they are broadcasting.",
},
{
Value: "nobroadcast",
Label: "No broadcast",
Help: "The user can not broadcast their webcam, but may still watch other peoples' webcams.",
},
{
Value: "novideo",
Label: "No webcam privileges ('Shy Accounts')",
Help: "The user can not broadcast or watch any webcam. Note: this option supercedes all other video-related rules.",
},
{
Value: "noimage",
Label: "No image sharing privileges ('Shy Accounts')",
Help: "The user can not share or see any image shared on chat.",
},
}
)
2024-11-24 07:49:29 +00:00
// OptGroup choices for the subject drop-down.
type OptGroup struct {
Header string
Options []Option
}
// Option for select boxes.
type Option struct {
Value string
Label string
}
// ChecklistOption for checkbox-lists.
type ChecklistOption struct {
Value string
Label string
Help string
}
// NotificationOptout field values (stored in user ProfileField table)
const (
NotificationOptOutFriendPhotos = "notif_optout_friends_photos"
NotificationOptOutPrivatePhotos = "notif_optout_private_photos"
NotificationOptOutExplicitPhotos = "notif_optout_explicit_photos"
NotificationOptOutLikes = "notif_optout_likes"
NotificationOptOutComments = "notif_optout_comments"
NotificationOptOutSubscriptions = "notif_optout_subscriptions"
NotificationOptOutFriendRequestAccepted = "notif_optout_friend_request_accepted"
NotificationOptOutPrivateGrant = "notif_optout_private_grant"
// Web Push Notifications
PushNotificationOptOutMessage = "notif_optout_push_messages"
PushNotificationOptOutFriends = "notif_optout_push_friends"
)
// Notification opt-outs (stored in ProfileField table)
var NotificationOptOutFields = []string{
NotificationOptOutFriendPhotos,
NotificationOptOutPrivatePhotos,
NotificationOptOutExplicitPhotos,
NotificationOptOutLikes,
NotificationOptOutComments,
NotificationOptOutSubscriptions,
NotificationOptOutFriendRequestAccepted,
NotificationOptOutPrivateGrant,
}
// Push Notification opt-outs (stored in ProfileField table)
var PushNotificationOptOutFields = []string{
PushNotificationOptOutMessage,
PushNotificationOptOutFriends,
}