From 8bbc6c75d5b307fa3f9031d7f5e155b5aae9261b Mon Sep 17 00:00:00 2001
From: Thomas Mathews
Date: Thu, 23 Mar 2023 19:19:15 -0700
Subject: [PATCH] Fix for DMs being broken
---
css/styles.css | 27 ++++++++++++++--------
index.html | 63 ++++++++++++++++++++++++++++----------------------
js/main.js | 15 +++++-------
js/model.js | 1 +
js/ui/state.js | 43 ++++++++++++++++++++++------------
5 files changed, 89 insertions(+), 60 deletions(-)
diff --git a/css/styles.css b/css/styles.css
index 246342f..455cb78 100644
--- a/css/styles.css
+++ b/css/styles.css
@@ -76,6 +76,11 @@ th, td {
}
/* Navigation */
+#view footer {
+ position: sticky;
+ bottom: 0;
+ z-index: var(--zHeader);
+}
.nav.full {
border-right: 1px solid var(--clrBorder);
padding: 10px;
@@ -94,15 +99,13 @@ th, td {
.nav.mobile {
display: none;
background: var(--clrBg);
- position: sticky;
- bottom: 0;
- z-index: var(--zHeader);
flex-direction: row;
border-top: var(--clrBorder) 1px solid;
}
.nav.mobile button {
padding: 18px;
flex: 1;
+ position: relative;
}
.nav [data-view].active img.inactive,
.nav [data-view] img.active {
@@ -415,6 +418,13 @@ textarea.post-input {
width: 100%;
min-height: 25px;
}
+textarea.post-input.dm {
+ background: var(--clrBtn);
+ border-radius: 12px;
+ padding: 10px;
+ min-height: 45px;
+ margin-top: 0;
+}
.post-tools {
text-align: right;
@@ -509,11 +519,10 @@ code {
/* Messaging */
-#dms-not-available {
- background: #ffd559;
- display: inline-block;
- color: #090909;
- padding: 15px;
+#dm-post {
+ padding: 15px;
+ background: var(--clrBg);
+ border-top: 1px solid var(--clrBorder);
}
.dm-group {
display: flex;
@@ -546,7 +555,7 @@ code {
color: white;
}
.event.dm {
- padding-bottom: 0;
+ padding-top: 0;
display: flex;
}
.event.dm:hover {
diff --git a/index.html b/index.html
index bd58e76..c13ab8e 100644
--- a/index.html
+++ b/index.html
@@ -179,33 +179,42 @@
-
+
diff --git a/js/main.js b/js/main.js
index 3528f39..3e79abb 100644
--- a/js/main.js
+++ b/js/main.js
@@ -184,7 +184,7 @@ function on_pool_open(relay) {
const { pubkey } = model;
// Get all our info & history, well close this after we get it
- fetch_profile(pubkey, model.pool, relay);
+ fetch_profile_info(pubkey, model.pool, relay);
// Get our notifications
relay.subscribe(SID_NOTIFICATIONS, [{
@@ -225,23 +225,20 @@ async function on_pool_eose(relay, sub_id) {
break
case SID_FRIENDS:
view_timeline_refresh(model);
- //pool.unsubscribe(sub_id, relay);
break
case SID_META:
- // if sid is ours and we did not init properly (must be login) then
- // we will fetch our friends history now
- //if (model.pubkey == identifier &&
- // !model_get_relay_que(model, relay).contacts_init) {
if (model.pubkey == identifier) {
- fetch_friends_history(Array.from(model.contacts.friends),
- pool, relay);
+ friends = Array.from(model.contacts.friends);
+ friends.push(identifier);
+ fetch_friends_history(friends, pool, relay);
log_debug("Got our friends after no init & fetching our friends");
}
case SID_NOTIFICATIONS:
case SID_PROFILES:
+ pool.unsubscribe(sub_id, relay);
+ break;
case SID_DMS_OUT:
case SID_DMS_IN:
- pool.unsubscribe(sub_id, relay);
break;
}
}
diff --git a/js/model.js b/js/model.js
index 11e198a..dea55f1 100644
--- a/js/model.js
+++ b/js/model.js
@@ -33,6 +33,7 @@ function model_process_event(model, relay, ev) {
fn = model_process_event_reaction;
break;
case KIND_DM:
+ fetch_profile = true;
fn = model_process_event_dm;
break;
}
diff --git a/js/ui/state.js b/js/ui/state.js
index 2486ed9..15cbd20 100644
--- a/js/ui/state.js
+++ b/js/ui/state.js
@@ -119,10 +119,12 @@ function view_timeline_apply_mode(model, mode, opts={}, push_state=true) {
view_update_navs(mode);
find_node("#view [role='profile-info']").classList.toggle("hide", mode != VM_USER);
const timeline_el = find_node("#timeline");
- timeline_el.classList.toggle("reverse", mode == VM_THREAD);
+ timeline_el.classList.toggle("reverse", mode == VM_THREAD || mode == VM_DM_THREAD);
timeline_el.classList.toggle("hide", mode == VM_SETTINGS || mode == VM_DM);
find_node("#settings").classList.toggle("hide", mode != VM_SETTINGS);
find_node("#dms").classList.toggle("hide", mode != VM_DM);
+ find_node("#dm-post").classList.toggle("hide", mode != VM_DM_THREAD);
+ find_node("#new-note-mobile").classList.toggle("hide", mode == VM_DM_THREAD);
find_node("#header-tools button[action='mark-all-read']")
.classList.toggle("hide", mode != VM_DM);
@@ -595,12 +597,15 @@ function init_my_pfp(model) {
function init_postbox(model) {
find_node("#reply-content").addEventListener("input", oninput_post);
+ find_node("#dm-post textarea").addEventListener("input", oninput_post);
find_node("button[name='reply']")
.addEventListener("click", onclick_reply);
find_node("button[name='reply-all']")
.addEventListener("click", onclick_reply);
find_node("button[name='send']")
.addEventListener("click", onclick_send);
+ find_node("button[name='send-dm']")
+ .addEventListener("click", onclick_send_dm);
}
async function onclick_reply(ev) {
do_send_reply(ev.target.dataset.all == "1");
@@ -622,26 +627,33 @@ async function onclick_send(ev) {
// Reset UI
el_input.value = "";
- trigger_postbox_assess(el_input);
+ trigger_postbox_assess(el_input);
+ close_modal(el);
/*
const el_cw = document.querySelector("#content-warning-input");
//tags: el_cw.value ? [["content-warning", el_cw.value]] : [],
-
- // Handle DM type post
- if (mode == VM_DM_THREAD) {
- if (!dms_available()) {
- window.alert("DMing not available.");
- return;
- }
- post.kind = KIND_DM;
- const target = el.dataset.pubkey;
- post.tags.splice(0, 0, ["p", target]);
- post.content = await window.nostr.nip04.encrypt(target, post.content);
- }
-
el_cw.value = "";*/
}
+async function onclick_send_dm(ev) {
+ const pubkey = await get_pubkey();
+ const el = find_node("#dm-post");
+ const el_input = el.querySelector("textarea");
+ const target = view_get_timeline_el().dataset.pubkey;
+ let post = {
+ pubkey,
+ kind: KIND_DM,
+ created_at: new_creation_time(),
+ content: await window.nostr.nip04.encrypt(target, el_input.value),
+ tags: [["p", target]],
+ };
+ post.id = await nostrjs.calculate_id(post);
+ post = await sign_event(post);
+ broadcast_event(post);
+
+ el_input.value = "";
+ trigger_postbox_assess(el_input);
+}
/* oninput_post checks the content of the textarea and updates the size
* of it's element. Additionally I will toggle the enabled state of the sending
* button.
@@ -738,6 +750,7 @@ function onclick_any(ev) {
break;
case "new-note":
new_note();
+ break;
}
}