Skip to content

Commit

Permalink
Add markdown support for summary (#482)
Browse files Browse the repository at this point in the history
* Add markdown support for summary

* Save both md and html summary
  • Loading branch information
trinity-1686a committed Mar 17, 2019
1 parent 191eb89 commit 570d7fe
Show file tree
Hide file tree
Showing 12 changed files with 79 additions and 12 deletions.
2 changes: 2 additions & 0 deletions migrations/postgres/2019-03-16-143637_summary-md/down.sql
@@ -0,0 +1,2 @@
-- This file should undo anything in `up.sql`
ALTER TABLE users DROP COLUMN summary_html;
3 changes: 3 additions & 0 deletions migrations/postgres/2019-03-16-143637_summary-md/up.sql
@@ -0,0 +1,3 @@
-- Your SQL goes here
ALTER TABLE users ADD COLUMN summary_html TEXT NOT NULL DEFAULT '';
UPDATE users SET summary_html = summary;
47 changes: 47 additions & 0 deletions migrations/sqlite/2019-03-16-143637_summary-md/down.sql
@@ -0,0 +1,47 @@
-- This file should undo anything in `up.sql`
CREATE TABLE users2 (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR NOT NULL,
display_name VARCHAR NOT NULL DEFAULT '',
outbox_url VARCHAR NOT NULL UNIQUE,
inbox_url VARCHAR NOT NULL UNIQUE,
is_admin BOOLEAN NOT NULL DEFAULT 'f',
summary TEXT NOT NULL DEFAULT '',
email TEXT,
hashed_password TEXT,
instance_id INTEGER REFERENCES instances(id) ON DELETE CASCADE NOT NULL,
creation_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ap_url TEXT NOT NULL default '' UNIQUE,
private_key TEXT,
public_key TEXT NOT NULL DEFAULT '',
shared_inbox_url VARCHAR,
followers_endpoint VARCHAR NOT NULL DEFAULT '' UNIQUE,
avatar_id INTEGER REFERENCES medias(id) ON DELETE SET NULL,
last_fetched_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
fqn TEXT NOT NULL DEFAULT '',
CONSTRAINT blog_authors_unique UNIQUE (username, instance_id)
);

INSERT INTO users2 SELECT
id,
username,
display_name,
outbox_url,
inbox_url,
is_admin,
summary,
email,
hashed_password,
instance_id,
creation_date,
ap_url,
private_key,
public_key,
shared_inbox_url,
followers_endpoint,
avatar_id,
last_fetched_date,
fqn
FROM users;
DROP TABLE users;
ALTER TABLE users2 RENAME TO users;
3 changes: 3 additions & 0 deletions migrations/sqlite/2019-03-16-143637_summary-md/up.sql
@@ -0,0 +1,3 @@
-- Your SQL goes here
ALTER TABLE users ADD COLUMN summary_html TEXT NOT NULL DEFAULT '';
UPDATE users SET summary_html = summary;
1 change: 1 addition & 0 deletions plume-models/src/schema.rs
Expand Up @@ -203,6 +203,7 @@ table! {
avatar_id -> Nullable<Int4>,
last_fetched_date -> Timestamp,
fqn -> Text,
summary_html -> Text,
}
}

Expand Down
22 changes: 16 additions & 6 deletions plume-models/src/users.rs
Expand Up @@ -17,6 +17,7 @@ use plume_common::activity_pub::{
sign::{gen_keypair, Signer},
ActivityStream, ApSignature, Id, IntoId, PublicKey,
};
use plume_common::utils;
use reqwest::{
header::{HeaderValue, ACCEPT},
Client,
Expand Down Expand Up @@ -52,7 +53,7 @@ pub struct User {
pub outbox_url: String,
pub inbox_url: String,
pub is_admin: bool,
pub summary: SafeString,
pub summary: String,
pub email: Option<String>,
pub hashed_password: Option<String>,
pub instance_id: i32,
Expand All @@ -65,6 +66,7 @@ pub struct User {
pub avatar_id: Option<i32>,
pub last_fetched_date: NaiveDateTime,
pub fqn: String,
pub summary_html: SafeString,
}

#[derive(Default, Insertable)]
Expand All @@ -75,7 +77,7 @@ pub struct NewUser {
pub outbox_url: String,
pub inbox_url: String,
pub is_admin: bool,
pub summary: SafeString,
pub summary: String,
pub email: Option<String>,
pub hashed_password: Option<String>,
pub instance_id: i32,
Expand All @@ -85,6 +87,7 @@ pub struct NewUser {
pub shared_inbox_url: Option<String>,
pub followers_endpoint: String,
pub avatar_id: Option<i32>,
pub summary_html: SafeString,
}

pub const AUTH_COOKIE: &str = "user_id";
Expand Down Expand Up @@ -212,6 +215,7 @@ impl User {
.set((
users::display_name.eq(name),
users::email.eq(email),
users::summary_html.eq(utils::md_to_html(&summary,"").0),
users::summary.eq(summary),
))
.execute(conn)?;
Expand Down Expand Up @@ -320,7 +324,12 @@ impl User {
.ap_actor_props
.inbox_string()?,
is_admin: false,
summary: SafeString::new(
summary:acct
.object
.object_props
.summary_string()
.unwrap_or_default(),
summary_html: SafeString::new(
&acct
.object
.object_props
Expand Down Expand Up @@ -684,7 +693,7 @@ impl User {
.set_name_string(self.display_name.clone())?;
actor
.object_props
.set_summary_string(self.summary.get().clone())?;
.set_summary_string(self.summary_html.get().clone())?;
actor
.object_props
.set_url_string(self.ap_url.clone())?;
Expand Down Expand Up @@ -902,7 +911,8 @@ impl NewUser {
username,
display_name,
is_admin,
summary: SafeString::new(summary),
summary: summary.to_owned(),
summary_html: SafeString::new(&utils::md_to_html(&summary,"").0),
email: Some(email),
hashed_password: Some(password),
instance_id: Instance::get_local(conn)?.id,
Expand Down Expand Up @@ -1050,7 +1060,7 @@ pub(crate) mod tests {
).unwrap();
assert_eq!(updated.display_name, "new name");
assert_eq!(updated.email.unwrap(), "em@il");
assert_eq!(updated.summary.get(), "<p>summary</p>");
assert_eq!(updated.summary_html.get(), "<p>summary</p>");

Ok(())
});
Expand Down
2 changes: 1 addition & 1 deletion src/routes/user.rs
Expand Up @@ -225,7 +225,7 @@ pub fn edit(name: String, user: User, conn: DbConn, intl: I18n) -> Result<Ructe,
UpdateUserForm {
display_name: user.display_name.clone(),
email: user.email.clone().unwrap_or_default(),
summary: user.summary.to_string(),
summary: user.summary,
},
ValidationErrors::default()
)))
Expand Down
2 changes: 1 addition & 1 deletion templates/posts/details.rs.html
Expand Up @@ -76,7 +76,7 @@ <h2 class="p-name">
<a href="@uri!(user::details: name = &author.fqn)">@author.name()</a>
<a rel="author" class="u-url" href="@author.ap_url"></a>
</h2>
<p>@Html(&author.summary)</h2>
<p>@Html(&author.summary_html)</h2>
</div>
@if !ctx.2.as_ref().map(|u| u.id == author.id).unwrap_or(false) {
<form action="@uri!(user::follow: name = &author.fqn)" method="POST">
Expand Down
3 changes: 2 additions & 1 deletion templates/users/edit.rs.html
Expand Up @@ -19,7 +19,8 @@ <h1>@i18n!(ctx.1, "Your Profile")</h1>

@input!(ctx.1, display_name (text), "Display name", form, errors.clone())
@input!(ctx.1, email (text), "Email", form, errors.clone())
@input!(ctx.1, summary (text), "Summary", form, errors)
<label for="summary">@i18n!(ctx.1, "Summary")</label>
<textarea id="summary" name="summary">@form.summary</textarea>

<input type="submit" value="@i18n!(ctx.1, "Update account")"/>
</form>
Expand Down
2 changes: 1 addition & 1 deletion templates/users/followed.rs.html
Expand Up @@ -18,7 +18,7 @@
@for follow in followed {
<div class="card">
<h3><a href="@uri!(user::details: name = &follow.fqn)">@follow.name()</a> <small>@format!("@{}", &follow.fqn)</small></h3>
<main><p>@Html(follow.summary)</p></main>
<main><p>@Html(follow.summary_html)</p></main>
</div>
}
</div>
Expand Down
2 changes: 1 addition & 1 deletion templates/users/followers.rs.html
Expand Up @@ -18,7 +18,7 @@
@for follower in followers {
<div class="card">
<h3><a href="@uri!(user::details: name = &follower.fqn)">@follower.name()</a> <small>@format!("@{}", &follower.fqn)</small></h3>
<main><p>@Html(follower.summary)</p></main>
<main><p>@Html(follower.summary_html)</p></main>
</div>
}
</div>
Expand Down
2 changes: 1 addition & 1 deletion templates/users/header.rs.html
Expand Up @@ -43,6 +43,6 @@ <h1 class="grow flex vertical">
}
</div>
<div class="user-summary p-note">
@Html(user.summary.clone())
@Html(user.summary_html.clone())
</div>
</div>

0 comments on commit 570d7fe

Please sign in to comment.