Public Access
Merge branch 'claude/snippets-vault-sharing-470476'
This commit is contained in:
@@ -64,6 +64,26 @@
|
||||
|
||||
<TextBox Classes="field" Text="{Binding EditorLabel}" PlaceholderText="name" />
|
||||
|
||||
<!--
|
||||
◆ Which vault a *new* snippet is filed into. Hidden for an existing one — its vault is not a
|
||||
field of this form, and changing it is MOVE below — and hidden entirely where there is only one
|
||||
vault to choose between, which is where most people stay.
|
||||
-->
|
||||
<StackPanel Spacing="6" IsVisible="{Binding ShowsEditorVaultChoice}">
|
||||
<TextBlock Classes="label" Text="VAULT" />
|
||||
<ComboBox HorizontalAlignment="Stretch" MinHeight="44"
|
||||
ItemsSource="{Binding EditorVaultChoices}"
|
||||
SelectedItem="{Binding EditorSelectedVault}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:VaultChoiceViewModel">
|
||||
<TextBlock Classes="mono" FontSize="12" Text="{Binding Display}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<TextBlock Classes="body"
|
||||
Text="A shared vault means everybody holding its key can read this command and insert it into their own terminals." />
|
||||
</StackPanel>
|
||||
|
||||
<TextBox Classes="field" Text="{Binding EditorCommand}" PlaceholderText="command"
|
||||
Height="120" AcceptsReturn="True" TextWrapping="Wrap"
|
||||
VerticalContentAlignment="Top" Padding="14,10" />
|
||||
@@ -125,6 +145,15 @@
|
||||
IsVisible="{Binding Badge, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
||||
<TextBlock Text="{Binding Badge}" />
|
||||
</Border>
|
||||
|
||||
<!--
|
||||
◆ Which vault this one is in, drawn only where there is more than one to be in. A shared
|
||||
snippet is a command the rest of a team can read and insert into their own terminals,
|
||||
and this card is the only place that fact appears before somebody taps EDIT.
|
||||
-->
|
||||
<Border Classes="tag outline" IsVisible="{Binding HasVaultBadge}">
|
||||
<TextBlock Text="{Binding VaultBadge}" />
|
||||
</Border>
|
||||
</StackPanel>
|
||||
|
||||
<!-- The command, on the surface every block of monospace in this design is drawn on. -->
|
||||
@@ -151,20 +180,66 @@
|
||||
IsEnabled="{Binding !IsEditing}">
|
||||
<StackPanel Spacing="9">
|
||||
|
||||
<Button Classes="primary" Content="{Binding InsertLabel}" Command="{Binding InsertCommand}"
|
||||
IsEnabled="{Binding CanInsert}" />
|
||||
<StackPanel Spacing="9" IsVisible="{Binding ShowsSelectionActions}">
|
||||
<Button Classes="primary" Content="{Binding InsertLabel}" Command="{Binding InsertCommand}"
|
||||
IsEnabled="{Binding CanInsert}" />
|
||||
|
||||
<!-- Only for a snippet marked as running. For every other one there is nothing this could mean. -->
|
||||
<Button Classes="secondary" Height="44" Content="{Binding RunLabel}"
|
||||
Command="{Binding RunCommand}" IsVisible="{Binding SelectionRuns}"
|
||||
IsEnabled="{Binding CanInsert}" />
|
||||
<!-- Only for a snippet marked as running. For every other one there is nothing this could mean. -->
|
||||
<Button Classes="secondary" Height="44" Content="{Binding RunLabel}"
|
||||
Command="{Binding RunCommand}" IsVisible="{Binding SelectionRuns}"
|
||||
IsEnabled="{Binding CanInsert}" />
|
||||
|
||||
<Grid ColumnDefinitions="*,8,*">
|
||||
<Button Grid.Column="0" Classes="secondary" Height="44" Content="EDIT"
|
||||
Command="{Binding EditCommand}" />
|
||||
<Button Grid.Column="2" Classes="danger" Height="44" Content="DELETE"
|
||||
Command="{Binding DeleteCommand}" />
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="*,8,*">
|
||||
<Button Grid.Column="0" Classes="secondary" Height="44" Content="EDIT"
|
||||
Command="{Binding EditCommand}" />
|
||||
<!--
|
||||
◆ Sharing the snippet. Beside EDIT rather than inside it, which is the line the hosts screen
|
||||
draws too: the two vaults are encrypted under different keys, so this is a re-seal into one and
|
||||
a tombstone in the other — nothing a SAVE could do. It shows only where there is somewhere to
|
||||
move to; see SnippetsViewModel.CanMove.
|
||||
-->
|
||||
<Button Grid.Column="2" Classes="secondary" Height="44" Content="MOVE"
|
||||
IsVisible="{Binding CanMove}" Command="{Binding MoveCommand}" />
|
||||
</Grid>
|
||||
|
||||
<!--
|
||||
◆ A row of its own, under the pair rather than beside them, as the hosts screen puts it. A phone
|
||||
has no hover and no tooltip, so the only thing separating a destructive button from an ordinary
|
||||
one is where a thumb lands.
|
||||
-->
|
||||
<Button Classes="danger" Height="44" Content="DELETE" Command="{Binding DeleteCommand}" />
|
||||
</StackPanel>
|
||||
|
||||
<!--
|
||||
◆ MOVING THE SNIPPET TO ANOTHER VAULT, in the place the insert controls were. A picker and two
|
||||
buttons rather than a question with a yes: what is being asked is which vault, and a move is undone
|
||||
by moving it back.
|
||||
|
||||
The sentence is not decoration. Unlike a host, a snippet crosses whole — there is no group and no
|
||||
tag to leave behind — so what there is to say is who can read it afterwards; and on a phone, where
|
||||
the status line is one line at the bottom of a screen somebody has already navigated away from,
|
||||
before the tap is the only place that reliably gets read.
|
||||
-->
|
||||
<StackPanel Spacing="10" IsVisible="{Binding IsMoving}">
|
||||
<TextBlock Classes="label" Text="MOVE TO VAULT" />
|
||||
<ComboBox HorizontalAlignment="Stretch" MinHeight="44"
|
||||
ItemsSource="{Binding MoveVaultChoices}"
|
||||
SelectedItem="{Binding SelectedMoveVault}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:VaultChoiceViewModel">
|
||||
<TextBlock Classes="mono" FontSize="12" Text="{Binding Display}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<TextBlock Classes="body"
|
||||
Text="The snippet is re-encrypted with the other vault's key, so everybody who holds that key can read this command and insert it — and nobody else can. Nothing else about it changes." />
|
||||
<Grid ColumnDefinitions="*,8,*">
|
||||
<Button Grid.Column="0" Classes="primary" Height="44" Content="MOVE"
|
||||
Command="{Binding ConfirmMoveCommand}" />
|
||||
<Button Grid.Column="2" Classes="secondary" Height="44" Content="CANCEL"
|
||||
Command="{Binding CancelMoveCommand}" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user