The Chat badge now counts pending room invitations, but the web UI only offered
to accept one: denyLobbyInvite() exists in the core and was called nowhere. An
invitation left alone therefore kept the badge lit for good, with no action able
to clear it. It can be declined now -- the entry leaves the room list with it,
since it came from the invitation and not from the nearby lobbies.
An invitation also carries no participant count: ChatLobbyInvite has lobby_id,
peer_id, lobby_name, lobby_topic and lobby_flags, and total_number_of_peers only
exists on the records the nearby list returns. The detail panel claimed "0 users"
for every invited room, and the join-failure message read the same missing field
to conclude the room was "no longer advertised by an online participant" --
a wrong diagnosis when the real cause was a refused identity.
The version label also went back to v154 on the way in: the four merges of #23
to #26 each resolved main.js by keeping the lower number, so the branch says
v154 while carrying the code of v157. Set to v158 rather than restoring v157,
since the composer spacing and the invitations landed after it.
Uses nearly the full phone viewport with safe spacing.
Keeps the folder list independently scrollable.
Keeps Add New and Edit buttons visible at the bottom.
Converts folder rows into labeled mobile cards.
Replaces the stray 0 with “No shared folders yet.”
Ensures nested dialogs appear above ShareManager.
- The Graph shortcut is hidden from the default friend list.
- After selecting a friend, Network Graph remains available in the detail tabs.
- Desktop behavior is unchanged.
- File and picture attachments now share one paperclip button.
- The message field gains more horizontal space on phones.
- Correct full-certificate friends being incorrectly marked “Pending validation.”
- Refresh identity lists immediately after creating an identity.
Update open chat-room and distant-chat identity selectors automatically.
- Replace the broken signed-identity password popup with a responsive mobile form.
- Allow creation of the first signed identity without requiring an existing signed identity.
Filter temporary all-zero GXS IDs.
- Wait for RetroShare to expose the real generated identity ID.
- Retry identity-detail loading when RetroShare temporarily returns empty data.
- Display the fetched nickname instead of “Unknown.”
Loaded last from main.scss, so it wins over the page stylesheets without
!important. Five sections, all scoped to the phone: multi column grids collapse,
wide tables become cards, the statusbar scrolls instead of truncating, form
fields stop triggering the iOS zoom, and anything only reachable on :hover gets
a touch fallback.
Not here any more, because improvements_v2 now does it itself: the navigation
(bottom tab bar and status sheet in main.js) and the master-detail switch of the
network, people and chat pages (.mobile-detail-open, driven from their own
state). This layer starts where those stop.
The two JS changes are the .mails-head and .comments-head markers those tables
need: mithril builds the DOM through the DOM API, so it never gets the implicit
<tbody> the HTML parser would insert, and neither tr:first-child nor a
`> tbody >` path can find the header row.
Changes include:
- RetroShare ID paste field is now the primary action.
- Supports raw IDs and rsInvite= URL-formatted IDs.
- Empty submissions are disabled.
- Clearer invalid-ID messaging.
- File import and drag/drop remain available as secondary options.
- More polished, responsive wizard styling.
- Accepts text files even when the browser omits their MIME type.
Clicking the emoji button opened the panel, and clicking inside it did insert an
emoji, but the panel looked empty: the emojis were being drawn, in white, over
white.
The global `button` rule applies the button() mixin, which sets `color: white`
to sit on a coloured background. The picker resets the parts of it that clash --
border, background, box-shadow -- but not the colour, and its own background is
#fff. The category row above the grid was invisible for the same reason.
Found by testing in a browser: nothing in the sources says a button is white
until you follow the mixin.
Mobile browsers count the collapsible URL bar in 100vh, so an overlay sized that
way is taller than the visible area: its bottom, where the buttons usually are,
sits under the fold and cannot be reached. dvh follows the bar as it retracts.
Three sites, all fixed overlays: the global modal backdrop (#popupmessage) and
the two chat dialog overlays. The vh line is kept above the dvh one as a
fallback for engines that do not know the unit and would otherwise drop the
declaration entirely.
styles.css regenerated with the pinned sass 1.97.3.
- Added a default Forum thumbnail to the forum details card.
- Added a default Board thumbnail for boards without an uploaded image.
- Added a default Channel thumbnail when no image is set.
- Added persistent avatar preview
- Shows a deterministic jdenticon by default
- Jdenticon updates based on the entered identity name
- Added custom avatar selection
- Shows selected avatar immediately
- Added “Use default” to remove the custom avatar
- Custom avatar is sent for linked and pseudonymous identities
- Updated responsive desktop/mobile layout
Cause: the thread view created a second full-height .widget inside the page’s existing .widget. The nested height and overflow rules caused long posts to extend into a clipped area.
Changes:
- Removed the nested full-height widget
The main Forums widget is now the single vertical scroll area
- Added safe wrapping for long text
- Added horizontal scrolling for wide code blocks and tables
- Constrained images, videos, and embeds to the available width
The `@media (max-width: 768px)` block opened for the People page was never
closed, so `sass` refused the whole stylesheet:
Error: expected "}".
app/scss/pages/_people.scss 427:2 @forward
This is why the styles kept "getting destroyed": `npm run build` could not
produce styles.css at all, and the file had to be maintained by hand.
The closing brace goes before `.people-context-menu`, not at the end of the
file: that rule is written at column 0 under its own header comment, so it
is meant to be a top level rule. Left inside the media query it would only
style the right-click menu below 768px, which is where it is least likely
to be used.
styles.css is regenerated by `npm run build`, which is why it comes back
from 25200 hand-assembled lines to the 7 compressed lines the sass pipeline
emits.
Added Navbar for webui on phones
for Boards and Channels:
* Validate API responses before processing.
* Keep rendering/navigation functional if a response is incomplete.
* Log a clear warning instead of throwing an uncaught error.
* Use independent sorted arrays, avoiding mutation of the master list.