[
https://issues.apache.org/jira/browse/WAVE-267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13031507#comment-13031507
]
David Hearnden commented on WAVE-267:
-------------------------------------
In Google Wave, the inability to delete the root blip is purely a UI
restriction. The underlying model does not prevent its deletion, and I think
it would be too difficult to attempt enforcing it at the model level.
We found that the ability to delete the first blip had a number of usability
issues. The first blip is special in terms of behaviour (it's the blip from
which a title is extracted), and also user association: the author(s) of the
root blip are thought of as the author(s) and owner(s) of the wave as a whole.
If/when that authorship changes, the identity of that wave in our mental models
is disturbed.
I think that our feelings about how the root blip should behave comes from the
impedance mismatch of Wave's one-communication-model-to-rule-them-all approach.
In a collaborative document environment, then the root blip gives the wave its
identity, and so deleting it seems like violating the wave. In a
conversational / chat environment, however, then the root blip is not that
special at all, so being unable to delete can sometimes seem like an
unnecessary restriction. Thinking on a grander scale, I think the right way to
overcome this mismatch is to have alternative UIs for different interaction
modes, but backed by the same data. So you could start a Wave with a
discussion UI (where root blip deletion is perhaps possible), but if the root
blip emerges as a collaborative document, then you could switch to a different
UI that is more suitable for that experience (and in which root blip deletion
is disabled), etc. That's obviously not a short term solution though.
On balance, I think Google Wave's behaviour is mostly right, but perhaps that's
just because I'm used to it:
*) It's infeasible to prevent any blip from being deleted at the model level,
especially under concurrent scenarios.
*) Throughout the lifetime of the wave UI, whichever blip is in the root
position should have its Delete link removed or disabled (and the keyboard
shortcut should be inactive), in order to make it difficult for the root blip
to be deleted.
*) In the rare scenario when a wave exists with no blips, then I think:
- the rarity of the scenario diminishes the importance of having a good
solution, and
- having the reply box create a blip (which would also be a new root blip)
seems to make sense.
I'll give a quick summary of how this is done in Google Wave. I think it's too
heavyweight for this particular issue (root blip deletion), but I certainly
don't object to it. If it is in scope for WIAB to have different editability
modes, read-only participants, etc, then maybe it's a good idea to nail it
upfront.
Google Wave's mechanism for controlling which UI actions are enabled/disabled
on particular bits of UI is as follows. The UI is already tree structured: the
main conversation contains participants and a thread, threads contains blips,
and blips have gadgets, other threads, and other (private) conversations as
replies, etc. In parallel, the UI code maintains a tree of editability
objects, at the same granularity as those UI components, where each editability
object reveals which actions are enabled/disabled. The association between
editability objects and UI components is live: as the editability changes, the
corresponding piece of UI is updated to enabled/disable the appropriate
controls. The tree structure provides a restriction model, so that, for
example, making the whole wave UI read-only simply means setting the top-level
editability object to read-only mode, which implicity causes all the descendant
ones to be restricted by that (so they all become read-only too). Or making a
particular thread comment-only (so that participants can add new blips, but not
delete or edit existing ones) also requires changing just one editability
object, implicity restricting all descendants.
For the range of editability modes that either exist or were trialled in Google
wave (read-only participants, non-deletable blips, writable conversations with
read-only private-conversations, writable gadgets in read-only blips,
participants that can edit but not add others, comment mode, etc), that
unifying model made sense, and I think worked pretty well. If WIAB has enough
editability modes, I think it's a good solution. But for doing just the
root-blip deletion prevention, an ad-hoc solution would be more pragmatic: the
paragraph above is just for reference.
> Deleting the only blip in the root thread is not handled well
> -------------------------------------------------------------
>
> Key: WAVE-267
> URL: https://issues.apache.org/jira/browse/WAVE-267
> Project: Wave
> Issue Type: Bug
> Components: Web Client
> Reporter: Michael MacFadden
>
> When you create a wave the root thread contains a single blip by default. If
> you delete this blip right off the bat several strange things start to
> happen.
> First Case:
> 1) Create a new wave.
> 2) While still in edit mode click the delete link in the single blip.
> 3) The reply box is not shown.
> At this point without refreshing the browser you can't create a new blip. If
> you now click on another wave, you get a shinny. If on the other hand you
> refresh the browser the reply box comes back.
> Second Case:
> 1) Create a new wave.
> 2) Click edit to get out of edit mode.
> 3) Click the delete link.
> 4) Click the reply box.
> We get a shinny.
> I am not certain what the correct behavior is, but I am sure this is not it.
> Should we prevent the user from deleting the blip if it is the only blip in
> the root thread. I don't see a case where a conversation with no blips is
> useful. If we do want to allow the user to delete this blip, the what is the
> UI metaphor for creating a new blip in an empty thread. The reply box is
> probably not correct since you aren't replying to anything.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira