add: ability to mute phrases

add: ability to disable gpa experiment
This commit is contained in:
trisua 2025-06-10 13:49:17 -04:00
parent 9d839a1a63
commit f034cc4f27
7 changed files with 212 additions and 63 deletions

View file

@ -160,13 +160,13 @@
(text "Posts"))
(span
(text "{{ profile.post_count }}")))
(text "{% if gpa and gpa > 0 -%}")
(text "{% if gpa and gpa > 0 and (not user.settings.disable_gpa_fun or is_helper) -%}")
(div
("class" "w-full flex justify-between items-center")
("title" "great post average (limited time)")
("title" "great post average (limited time fun)")
(span
("class" "notification chip")
(text "GPA 🐇"))
(text "GPA"))
(span
(text "{{ gpa|round(method=\"floor\", precision=2) }}")))
(text "{%- endif %}")

View file

@ -1204,8 +1204,19 @@
settings.warning,
\"textarea\",
],
[[\"muted\", \"Muted phrases\"], settings.muted.join(\"\\n\"), \"textarea\", {
embed_html:
'<span class=\"fade\">Muted phrases should all be on new lines.</span>',
}],
],
settings,
{
muted: (new_muted) => {
settings.muted = new_muted
.split(\"\\n\")
.map((t) => t.trim());
},
},
);
ui.generate_settings_ui(
@ -1303,6 +1314,12 @@
\"Hides dislikes on all posts. Users can still dislike your posts, you just won't be able to see it.\",
\"text\",
],
[[], \"Fun\", \"title\"],
[
[\"disable_gpa_fun\", \"Disable GPA\"],
\"{{ profile.settings.disable_gpa_fun }}\",
\"checkbox\",
],
],
settings,
);

View file

@ -856,27 +856,29 @@ media_theme_pref();
}
});
self.define("render_settings_ui_field", (_, into_element, option) => {
if (option.input_element_type === "divider") {
into_element.innerHTML += `<hr class="margin" />`;
return;
}
self.define(
"render_settings_ui_field",
(_, into_element, option, id_key) => {
if (option.input_element_type === "divider") {
into_element.innerHTML += `<hr class="margin" />`;
return;
}
if (option.input_element_type === "title") {
into_element.innerHTML += `<hr class="margin" /><b>${option.value}</b>`;
return;
}
if (option.input_element_type === "title") {
into_element.innerHTML += `<hr class="margin" /><b>${option.value}</b>`;
return;
}
if (option.input_element_type === "text") {
into_element.innerHTML += `<p>${option.value}</p>`;
return;
}
if (option.input_element_type === "text") {
into_element.innerHTML += `<p>${option.value}</p>`;
return;
}
if (option.input_element_type === "checkbox") {
into_element.innerHTML += `<div class="card flex gap-2">
if (option.input_element_type === "checkbox") {
into_element.innerHTML += `<div class="card flex gap-2">
<input
type="checkbox"
onchange="window.set_setting_field('${option.key}', event.target.checked)"
onchange="window.set_setting_field${id_key}('${option.key}', event.target.checked)"
placeholder="${option.key}"
name="${option.key}"
id="${option.key}"
@ -887,11 +889,11 @@ media_theme_pref();
<label for="${option.key}"><b>${option.label.replaceAll("_", " ")}</b></label>
</div>`;
return;
}
return;
}
if (option.input_element_type === "color") {
into_element.innerHTML += `<div class="flex flex-col gap-2">
if (option.input_element_type === "color") {
into_element.innerHTML += `<div class="flex flex-col gap-2">
<label for="${option.key}"><b>${option.label.replaceAll("_", " ")}</b></label>
<div class="card flex flex-row gap-2">
@ -905,7 +907,7 @@ media_theme_pref();
<input
type="text"
onchange="window.set_setting_field('${option.key}', event.target.value); window.update_color_field('${option.key}', event.target.value)"
onchange="window.set_setting_field${id_key}('${option.key}', event.target.value); window.update_color_field('${option.key}', event.target.value)"
placeholder="${option.key}"
name="${option.key}"
id="${option.key}"
@ -918,10 +920,10 @@ media_theme_pref();
<span class="fade">${(option.attributes || { description: "" }).description}</span>
</div>`;
return;
}
return;
}
into_element.innerHTML += `<div class="card-nest">
into_element.innerHTML += `<div class="card-nest">
<div class="card small">
<label for="${option.key}"><b>${option.label.replaceAll("_", " ")}</b></label>
</div>
@ -929,7 +931,7 @@ media_theme_pref();
<div class="card flex flex-col gap-2">
<${option.input_element_type || "input"}
type="text"
onchange="window.set_setting_field('${option.key}', event.target.value)"
onchange="window.set_setting_field${id_key}('${option.key}', event.target.value)"
placeholder="${option.key}"
name="${option.key}"
id="${option.key}"
@ -939,26 +941,37 @@ ${option.input_element_type === "textarea" ? `${option.value}</textarea>` : ""}
${(option.attributes || { embed_html: "" }).embed_html}
</div>
</div>`;
});
},
);
self.define(
"generate_settings_ui",
({ $ }, into_element, options, settings_ref, key_map = {}) => {
const id_key = `a${crypto.randomUUID().replaceAll("-", "")}`;
for (const option of options) {
$.render_settings_ui_field(into_element, {
key: Array.isArray(option[0]) ? option[0][0] : option[0],
label: Array.isArray(option[0]) ? option[0][1] : option[0],
value: option[1],
input_element_type: option[2],
attributes: option[3],
});
$.render_settings_ui_field(
into_element,
{
key: Array.isArray(option[0])
? option[0][0]
: option[0],
label: Array.isArray(option[0])
? option[0][1]
: option[0],
value: option[1],
input_element_type: option[2],
attributes: option[3],
},
id_key,
);
}
window.set_setting_field = (key, value) => {
window[`set_setting_field${id_key}`] = (key, value) => {
if (settings_ref && !key_map[key]) {
settings_ref[key] = value;
} else {
key_map[key](value);
console.log("custom_update", key);
}
console.log("update", key);

View file

@ -71,7 +71,13 @@ pub async fn index_request(
{
Ok(l) => match data
.0
.fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
.fill_posts_with_community(
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await
{
Ok(l) => l,
@ -103,7 +109,14 @@ pub async fn popular_request(
Ok(l) => match data
.0
.fill_posts_with_community(
l,
data.0.posts_muted_phrase_filter(
&l,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -149,7 +162,13 @@ pub async fn following_request(
{
Ok(l) => match data
.0
.fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
.fill_posts_with_community(
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await
{
Ok(l) => l,
@ -183,7 +202,14 @@ pub async fn all_request(
Ok(l) => match data
.0
.fill_posts_with_community(
l,
data.0.posts_muted_phrase_filter(
&l,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -580,7 +606,13 @@ pub async fn search_request(
{
Ok(l) => match data
.0
.fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
.fill_posts_with_community(
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await
{
Ok(l) => l,
@ -592,7 +624,13 @@ pub async fn search_request(
match data.0.get_posts_searched(12, req.page, &req.query).await {
Ok(l) => match data
.0
.fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
.fill_posts_with_community(
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await
{
Ok(l) => l,

View file

@ -245,7 +245,14 @@ pub async fn posts_request(
Ok(p) => match data
.0
.fill_posts_with_community(
p,
data.0.posts_muted_phrase_filter(
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -266,7 +273,14 @@ pub async fn posts_request(
Ok(p) => match data
.0
.fill_posts_with_community(
p,
data.0.posts_muted_phrase_filter(
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -285,7 +299,14 @@ pub async fn posts_request(
Ok(p) => match data
.0
.fill_posts_with_community(
p,
data.0.posts_muted_phrase_filter(
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -394,7 +415,14 @@ pub async fn replies_request(
Ok(p) => match data
.0
.fill_posts_with_community(
p,
data.0.posts_muted_phrase_filter(
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,
@ -500,7 +528,14 @@ pub async fn media_request(
Ok(p) => match data
.0
.fill_posts_with_community(
p,
data.0.posts_muted_phrase_filter(
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users,
&user,