diff --git a/crates/app/src/public/html/components.lisp b/crates/app/src/public/html/components.lisp
index 578345a..1e3aa17 100644
--- a/crates/app/src/public/html/components.lisp
+++ b/crates/app/src/public/html/components.lisp
@@ -227,7 +227,7 @@
("hook" "long")
(text "{{ post.title }}"))
- (button ("class" "small lowered") (icon (text "ellipsis"))))
+ (button ("title" "View post content") ("class" "small lowered") (icon (text "ellipsis"))))
(text "{% else %}")
(text "{% if not post.context.content_warning -%}")
(span
@@ -327,6 +327,7 @@
("class" "camo small")
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -922,6 +923,7 @@
("class" "camo small")
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -1035,6 +1037,7 @@
("class" "camo small")
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -1273,6 +1276,7 @@
("class" "camo small square")
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -1494,6 +1498,7 @@
("title" "More options")
("onclick" "document.getElementById('post_options_dialog').showModal()")
("type" "button")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(label
@@ -2085,6 +2090,7 @@
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("style" "width: 32px")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -2111,6 +2117,7 @@
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("style" "width: 32px")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -2202,6 +2209,7 @@
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("style" "width: 32px")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
@@ -2281,6 +2289,7 @@
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("style" "width: 32px")
+ ("title" "More options")
(text "{{ icon \"ellipsis\" }}"))
(div
("class" "inner")
diff --git a/crates/app/src/public/html/macros.lisp b/crates/app/src/public/html/macros.lisp
index 0b0ba4b..969439b 100644
--- a/crates/app/src/public/html/macros.lisp
+++ b/crates/app/src/public/html/macros.lisp
@@ -73,6 +73,7 @@
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("style" "gap: var(--pad-1) !important")
+ ("title" "Account options")
(text "{{ components::avatar(username=user.username, size=\"24px\") }}")
(icon_class (text "chevron-down") (text "dropdown_arrow")))
diff --git a/crates/app/src/public/html/profile/settings.lisp b/crates/app/src/public/html/profile/settings.lisp
index 18fcc99..da41608 100644
--- a/crates/app/src/public/html/profile/settings.lisp
+++ b/crates/app/src/public/html/profile/settings.lisp
@@ -1493,7 +1493,7 @@
globalThis.apply_preset = async (preset) => {
if (
!(await trigger(\"atto::confirm\", [
- \"Are you sure you would like to do this? This will change all listed settings to the listed value.\",
+ \"Are you sure you would like to do this? This will change all listed settings to their listed values.\",
]))
) {
return;
diff --git a/crates/app/src/routes/api/v1/auth/connections/stripe.rs b/crates/app/src/routes/api/v1/auth/connections/stripe.rs
index 16db8d6..91560b0 100644
--- a/crates/app/src/routes/api/v1/auth/connections/stripe.rs
+++ b/crates/app/src/routes/api/v1/auth/connections/stripe.rs
@@ -303,7 +303,7 @@ pub async fn stripe_webhook(
if let Err(e) = data
.create_notification(Notification::new(
"It seems your recent payment has failed :(".to_string(),
- "No worries! Your subscription is still active and will be retried. Your supporter status will resume when you have a successful payment."
+ "No worries! Your subscription is still active and will be retried. Your supporter status will resume when you have a successful payment.\n\nIf you've cancelled your subscription, you can safely disregard this."
.to_string(),
user.id,
))
diff --git a/crates/core/src/database/drivers/sql/create_products.sql b/crates/core/src/database/drivers/sql/create_products.sql
index 54bec8d..4a972aa 100644
--- a/crates/core/src/database/drivers/sql/create_products.sql
+++ b/crates/core/src/database/drivers/sql/create_products.sql
@@ -7,5 +7,6 @@ CREATE TABLE IF NOT EXISTS products (
likes INT NOT NULL,
dislikes INT NOT NULL,
product_type TEXT NOT NULL,
- price TEXT NOT NULL
+ price TEXT NOT NULL,
+ uploads TEXT NOT NULL
)
diff --git a/crates/core/src/database/products.rs b/crates/core/src/database/products.rs
index a9833f0..5127f78 100644
--- a/crates/core/src/database/products.rs
+++ b/crates/core/src/database/products.rs
@@ -19,7 +19,8 @@ impl DataManager {
likes: get!(x->5(i32)) as isize,
dislikes: get!(x->6(i32)) as isize,
product_type: serde_json::from_str(&get!(x->7(String))).unwrap(),
- price: serde_json::from_str(&get!(x->9(String))).unwrap(),
+ price: serde_json::from_str(&get!(x->8(String))).unwrap(),
+ uploads: serde_json::from_str(&get!(x->9(String))).unwrap(),
}
}
@@ -84,7 +85,7 @@ impl DataManager {
let res = execute!(
&conn,
- "INSERT INTO products VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
+ "INSERT INTO products VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)",
params![
&(data.id as i64),
&(data.created as i64),
@@ -95,6 +96,7 @@ impl DataManager {
&0_i32,
&serde_json::to_string(&data.product_type).unwrap(),
&serde_json::to_string(&data.price).unwrap(),
+ &serde_json::to_string(&data.uploads).unwrap(),
]
);
diff --git a/crates/core/src/database/questions.rs b/crates/core/src/database/questions.rs
index 253b6c2..84f9eac 100644
--- a/crates/core/src/database/questions.rs
+++ b/crates/core/src/database/questions.rs
@@ -45,7 +45,11 @@ impl DataManager {
question: &Question,
) -> Result