diff --git a/index.html b/index.html index d154266..c7e420d 100644 --- a/index.html +++ b/index.html @@ -7,36 +7,36 @@ Yo, Sup - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
- +
@@ -44,12 +44,12 @@

Yo, Sup? - +

The blue bird experience for Nostr.

@@ -58,24 +58,24 @@
@@ -83,33 +83,33 @@ @@ -128,9 +128,9 @@ Mark All Read + src="/icon/no-user.svg"/> + src="/icon/no-user.svg"/>
@@ -142,7 +142,7 @@ @@ -154,14 +154,14 @@
+ +
@@ -173,7 +173,7 @@
- +
@@ -193,7 +193,7 @@
@@ -218,7 +218,7 @@
@@ -260,7 +260,7 @@
@@ -279,7 +279,7 @@
@@ -298,7 +298,7 @@
diff --git a/js/main.js b/js/main.js index c273c76..9c6c46f 100644 --- a/js/main.js +++ b/js/main.js @@ -1,9 +1,9 @@ let DAMUS = new_model(); // TODO autogenerate these constants with a bash script -const IMG_EVENT_LIKED = "icon/event-liked.svg"; -const IMG_EVENT_LIKE = "icon/event-like.svg"; -const IMG_NO_USER = "icon/no-user.svg"; +const IMG_EVENT_LIKED = "/icon/event-liked.svg"; +const IMG_EVENT_LIKE = "/icon/event-like.svg"; +const IMG_NO_USER = "/icon/no-user.svg"; const SID_META = "meta"; const SID_HISTORY = "history"; @@ -103,10 +103,10 @@ async function webapp_init() { model_process_event(model, undefined, ev); }); log_debug("loaded events", Object.keys(model.all_events).length); + */ - // Update our view and apply timer methods once all data is ready to go. - view_timeline_update(model);*/ - view_timeline_apply_mode(model, VM_FRIENDS, {hide_replys: true}); + var { mode, opts, valid } = parse_url_mode(); + view_timeline_apply_mode(model, mode, opts, !valid); on_timer_timestamps(); on_timer_invalidations(); on_timer_save(); @@ -115,6 +115,36 @@ async function webapp_init() { return pool; } +function parse_url_mode() { + var mode; + var valid = true; + var opts = {}; + var parts = window.location.pathname.split("/").slice(1); + for (var key in VIEW_NAMES) { + if (VIEW_NAMES[key].toLowerCase() == parts[0]) { + mode = key; + break; + } + } + if (!mode) { + mode = VM_FRIENDS; + valid = false; + } + switch (mode) { + case VM_FRIENDS: + opts.hide_replys = true; + break; + case VM_THREAD: + opts.thread_id = parts[1]; + break; + case VM_DM_THREAD: + case VM_USER: + opts.pubkey = parts[1]; + break; + } + return { mode, opts, valid }; +} + function on_timer_timestamps() { setTimeout(() => { view_timeline_update_timestamps(); diff --git a/js/ui/render.js b/js/ui/render.js index e811b3a..6ce77e2 100644 --- a/js/ui/render.js +++ b/js/ui/render.js @@ -198,7 +198,7 @@ function render_action_bar(model, ev, opts={}) { if (!shared && event_can_reply(ev)) { str += html` `; } str += ` `; if (can_delete) { const delete_id = shared ? shared.share_evid : ev.id; str += html` ` } return str + "
"; diff --git a/js/ui/state.js b/js/ui/state.js index 37b0bb0..d5d15b8 100644 --- a/js/ui/state.js +++ b/js/ui/state.js @@ -7,6 +7,16 @@ const VM_THREAD = "thread"; // all events in response to target event const VM_USER = "user"; // all events by pubkey const VM_SETTINGS = "settings"; +const VIEW_NAMES= {}; +VIEW_NAMES[VM_FRIENDS] = "Home"; +VIEW_NAMES[VM_EXPLORE] = "Explore"; +VIEW_NAMES[VM_NOTIFICATIONS] = "Notifications"; +VIEW_NAMES[VM_DM] = "Messages"; +VIEW_NAMES[VM_DM_THREAD] = "DM"; +VIEW_NAMES[VM_USER] = "Profile"; +VIEW_NAMES[VM_THREAD] = "Thread"; +VIEW_NAMES[VM_SETTINGS] = "Settings"; + function view_get_timeline_el() { return find_node("#timeline"); } @@ -48,10 +58,6 @@ function view_timeline_apply_mode(model, mode, opts={}, push_state=true) { } } - // Push a new state to the browser history stack - if (push_state) - history.pushState({mode, opts}, ''); - // Fetch history for certain views if (mode == VM_THREAD) { view_show_spinner(true); @@ -65,18 +71,28 @@ function view_timeline_apply_mode(model, mode, opts={}, push_state=true) { reset_notifications(model); } - const names = {}; - names[VM_FRIENDS] = "Home"; - names[VM_EXPLORE] = "Explore"; - names[VM_NOTIFICATIONS] = "Notifications"; - names[VM_DM] = "Messages"; - names[VM_DM_THREAD] = "Messages"; - names[VM_USER] = "Profile"; - names[VM_THREAD] = "Thread"; - names[VM_SETTINGS] = "Settings"; + const names = VIEW_NAMES; let name = names[mode]; let profile; + // Push a new state to the browser history stack + if (push_state) { + let pieces = [name.toLowerCase()]; + switch (mode) { + case VM_FRIENDS: + pieces = []; + break; + case VM_THREAD: + pieces.push(thread_id); + break; + case VM_USER: + case VM_DM_THREAD: + pieces.push(pubkey); + break; + } + history.pushState({mode, opts}, "", "/"+pieces.join("/")); + } + el.dataset.mode = mode; delete el.dataset.threadId; delete el.dataset.pubkey;