Added reply one/all because it was annoying me

This commit is contained in:
Thomas Mathews 2022-12-27 20:21:12 -08:00
parent 7ce72540cf
commit 646a0a2daf
3 changed files with 37 additions and 14 deletions

View file

@ -129,30 +129,40 @@ async function send_post() {
post_input_changed(input_el) post_input_changed(input_el)
} }
function new_reply_tags(ev) {
return [
["e", ev.id, "", "reply"],
["p", ev.pubkey],
];
}
async function create_reply(pubkey, content, from) { async function create_reply(pubkey, content, ev, all=true) {
const tags = gather_reply_tags(pubkey, from) const tags = all ? gather_reply_tags(pubkey, ev) : new_reply_tags(ev);
const created_at = Math.floor(new Date().getTime() / 1000) const created_at = new_creation_time();
let kind = from.kind let kind = ev.kind;
// convert emoji replies into reactions // convert emoji replies into reactions
if (is_valid_reaction_content(content)) if (is_valid_reaction_content(content))
kind = 7 kind = 7;
let reply = {
let reply = { pubkey, tags, content, created_at, kind } pubkey,
tags,
content,
created_at,
kind
}
reply.id = await nostrjs.calculate_id(reply) reply.id = await nostrjs.calculate_id(reply)
reply = await sign_event(reply) reply = await sign_event(reply)
return reply return reply
} }
async function send_reply(content, replying_to) { async function send_reply(content, replying_to, all=true) {
const ev = DAMUS.all_events[replying_to] const ev = DAMUS.all_events[replying_to]
if (!ev) if (!ev)
return return;
const pubkey = await get_pubkey() const pubkey = await get_pubkey()
let reply = await create_reply(pubkey, content, ev) let reply = await create_reply(pubkey, content, ev, all)
broadcast_event(reply) broadcast_event(reply)
broadcast_related_events(reply) broadcast_related_events(reply)

View file

@ -226,9 +226,12 @@ function render_action_bar(model, ev, opts={}) {
const reaction_id = reaction ? reaction.id : ""; const reaction_id = reaction ? reaction.id : "";
return html` return html`
<div class="action-bar"> <div class="action-bar">
<button class="icon" title="Reply" onclick="reply_to('${ev.id}')"> <button class="icon" title="Reply" onclick="reply_author('${ev.id}')">
<img class="icon svg small" src="icon/event-reply.svg"/> <img class="icon svg small" src="icon/event-reply.svg"/>
</button> </button>
<button class="icon" title="Reply All" onclick="reply_all('${ev.id}')">
<img class="icon svg small" src="icon/event-reply-all.svg"/>
</button>
<button class="icon react heart ${ab(liked, 'liked', '')}" <button class="icon react heart ${ab(liked, 'liked', '')}"
onclick="click_toggle_like(this)" onclick="click_toggle_like(this)"
data-reaction-id="${reaction_id}" data-reaction-id="${reaction_id}"

View file

@ -187,19 +187,21 @@ async function do_send_reply() {
const modal = document.querySelector("#reply-modal"); const modal = document.querySelector("#reply-modal");
const replying_to = modal.querySelector("#replying-to"); const replying_to = modal.querySelector("#replying-to");
const evid = replying_to.dataset.evid; const evid = replying_to.dataset.evid;
const all = replying_to.dataset.toAll != "";
const reply_content_el = document.querySelector("#reply-content"); const reply_content_el = document.querySelector("#reply-content");
const content = reply_content_el.value; const content = reply_content_el.value;
await send_reply(content, evid); await send_reply(content, evid, all);
reply_content_el.value = ""; reply_content_el.value = "";
close_reply(); close_reply();
} }
function reply_to(evid) { function reply(evid, all=false) {
const ev = DAMUS.all_events[evid] const ev = DAMUS.all_events[evid]
const modal = document.querySelector("#reply-modal") const modal = document.querySelector("#reply-modal")
const replybox = modal.querySelector("#reply-content") const replybox = modal.querySelector("#reply-content")
const replying_to = modal.querySelector("#replying-to") const replying_to = modal.querySelector("#replying-to")
replying_to.dataset.evid = evid replying_to.dataset.evid = evid
replying_to.dataset.toAll = all ? "all" : "";
replying_to.innerHTML = render_event_nointeract(DAMUS, ev, { replying_to.innerHTML = render_event_nointeract(DAMUS, ev, {
is_composing: true, is_composing: true,
nobar: true nobar: true
@ -208,6 +210,14 @@ function reply_to(evid) {
replybox.focus() replybox.focus()
} }
function reply_author(evid) {
reply(evid);
}
function reply_all(evid) {
reply(evid, true);
}
function redraw_my_pfp(model) { function redraw_my_pfp(model) {
const p = model.profiles[model.pubkey] const p = model.profiles[model.pubkey]
const html = render_pfp(model.pubkey, p || {}); const html = render_pfp(model.pubkey, p || {});