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; } }