The availability bar showed the guests it had free/busy for and quietly
left out the ones it did not. In one row that is survivable. As a grid it
would be a lie: a row with nothing in it reads as a diary with nothing in
it, and "we cannot see this person's calendar" is the one thing that must
not look like "this person is free".
So everyone the event concerns now gets a row, and the ones with no
free/busy to read are drawn hatched rather than empty, with a line under
the grid saying how many and why. You get a row too, first. Scheduling
around the other people and not around yourself is how two things end up
at the same time, and the organiser was the one calendar the panel never
showed.
Your own row is never unknown. Where the directory does not list you under
the address your identity sends from -- an alias, a login that differs
from the address -- the account is still yours to read, and Stalwart
answers for it under the account's own id.
The window steps backwards and forwards a screenful at a time without
touching the event, which is the "movable forwards & backwards" the report
asks for, and offers its way back when you have wandered off.
And the bars are somewhere to put the event rather than only something to
read: the pointer shows the half hour it is over, and a click moves the
event there keeping its length. Clicking while stepped away moves the
event to where you clicked and returns the view to it, so it lands where
you were looking instead of jumping.
Free/busy is answered per principal, and only the server's own accounts
are principals. Somebody at another domain has none to read -- which is
not a gap to be closed, it is what the protocol can see -- so the grid
says so rather than drawing them blank.
Closes#172
{fbOffset!==0&&<buttontype="button"className="btn btn-ghost btn-sm"onClick={()=>setFbOffset(0)}>{translate("Back to the event")}</button>}
<spanclassName="spacer"/>
{/* The time a click would set, so placing an event is aimed rather than guessed. */}
<spanclassName="hint">{fbHover?(fbWindow.days===1?formatClock(fbHover):`${formatWeekday(fbHover,"short")}${formatClock(fbHover)}`):translate("Click to move the event")}</span>
</div>
{/* The axis answers "what am I looking at" -- without it the bar
could as easily have been working hours as a whole day. */}
<divclassName="hint">{plural(fbWindow.daysHidden,{one:"The event runs {n} day longer than this shows.",other:"The event runs {n} days longer than this shows."})}</div>
)}
{/* Said once, under the grid, rather than repeated on every
row that has nothing to show. */}
{unknown.length>0&&(
<divclassName="hint">
{known.length===0
?translate("Nobody here has free/busy on this server, so none of these rows can say whether anyone is free.")
:plural(unknown.length,{
one:"{n} guest is not on this server, so there is no free/busy to read for them.",
other:"{n} guests are not on this server, so there is no free/busy to read for them.",
})}
</div>
)}
</div>
);
})()}
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.