Skip to content

Commit 80def44

Browse files
committed
Clarify editor split actions and preserve AI scroll
1 parent 97289cf commit 80def44

File tree

16 files changed

+324
-121
lines changed

16 files changed

+324
-121
lines changed

src/PrompterOne.Shared/Editor/Components/EditorMetadataRail.razor

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@namespace PrompterOne.Shared.Components.Editor
22
@using System.Globalization
33
@using Microsoft.Extensions.Localization
4+
@using PrompterOne.Core.Models.Editor
45
@using PrompterOne.Shared.Components
56
@using PrompterOne.Shared.Localization
67
@inject IStringLocalizer<SharedResource> Localizer
@@ -148,6 +149,64 @@
148149
<div class="ed-stat"><span>@Text(UiTextKey.CommonSegments)</span><b>@Status.SegmentCount</b></div>
149150
<div class="ed-stat"><span>@Text(UiTextKey.CommonBlocks)</span><b>@Status.BlockCount</b></div>
150151

152+
<div class="ed-section-label ed-meta-subsection">@Text(UiTextKey.EditorMetadataSplitSection)</div>
153+
<p class="ed-meta-note ed-meta-action-note">@Text(UiTextKey.EditorMetadataSplitHint)</p>
154+
<div class="ed-meta-actions">
155+
<button type="button"
156+
class="ed-meta-action"
157+
data-testid="@UiTestIds.Editor.SplitTopLevel"
158+
@onclick="() => SplitRequested.InvokeAsync(TpsDocumentSplitMode.TopLevelHeading)">
159+
@Text(UiTextKey.EditorSplitTopLevel)
160+
</button>
161+
<button type="button"
162+
class="ed-meta-action"
163+
data-testid="@UiTestIds.Editor.SplitSegment"
164+
@onclick="() => SplitRequested.InvokeAsync(TpsDocumentSplitMode.SegmentHeading)">
165+
@Text(UiTextKey.EditorSplitSegment)
166+
</button>
167+
</div>
168+
169+
@if (SplitFeedback is not null)
170+
{
171+
<div class="ed-sidebar-note ed-sidebar-note-split ed-meta-split-feedback" data-testid="@UiTestIds.Editor.SplitStatus">
172+
<div class="ed-sidebar-note-head">
173+
<div>
174+
<div class="ed-sidebar-note-kicker" data-testid="@UiTestIds.Editor.SplitResultTitle">@SplitFeedback.Title</div>
175+
<div class="ed-sidebar-note-summary" data-testid="@UiTestIds.Editor.SplitResultSummary">@SplitFeedback.Summary</div>
176+
</div>
177+
<span class="ed-sidebar-note-badge" data-testid="@UiTestIds.Editor.SplitResultBadge">@SplitFeedback.HeadingBadge</span>
178+
</div>
179+
180+
<p class="ed-sidebar-note-copy" data-testid="@UiTestIds.Editor.SplitResultLibrary">@SplitFeedback.DestinationNote</p>
181+
<p class="ed-sidebar-note-copy ed-sidebar-note-copy-muted" data-testid="@UiTestIds.Editor.SplitResultCurrentDraft">@SplitFeedback.DraftNote</p>
182+
183+
@if (SplitFeedback.CreatedTitles.Count > 0)
184+
{
185+
<div class="ed-sidebar-note-list" data-testid="@UiTestIds.Editor.SplitResultList">
186+
@for (var index = 0; index < SplitFeedback.CreatedTitles.Count; index++)
187+
{
188+
<div class="ed-sidebar-note-item" data-testid="@UiTestIds.Editor.SplitResultItem(index)">
189+
<span class="ed-sidebar-note-item-index">@($"{index + 1:00}")</span>
190+
<span class="ed-sidebar-note-item-title">@SplitFeedback.CreatedTitles[index]</span>
191+
</div>
192+
}
193+
</div>
194+
}
195+
196+
@if (SplitFeedback.AdditionalCount > 0)
197+
{
198+
<div class="ed-sidebar-note-more" data-testid="@UiTestIds.Editor.SplitResultMore">@Format(UiTextKey.EditorSplitMoreInLibraryFormat, SplitFeedback.AdditionalCount)</div>
199+
}
200+
201+
<button class="ed-sidebar-note-link"
202+
data-testid="@UiTestIds.Editor.SplitResultOpenLibrary"
203+
type="button"
204+
@onclick="() => OpenLibraryRequested.InvokeAsync()">
205+
@SplitFeedback.OpenLibraryLabel
206+
</button>
207+
</div>
208+
}
209+
151210
<div class="ed-section-label ed-meta-subsection">@LocalFileSectionLabel</div>
152211
<div class="ed-stat" data-testid="@UiTestIds.Editor.LocalHistoryStatus"><span>@AutoSaveLabel</span><b>@GetAutoSaveStateLabel()</b></div>
153212
<div class="ed-stat"><span>@HistoryLabel</span><b>@GetHistoryCountLabel()</b></div>
@@ -202,10 +261,16 @@
202261

203262
[Parameter] public IReadOnlyList<EditorLocalRevisionViewModel> LocalHistory { get; set; } = [];
204263

264+
[Parameter] public EventCallback OpenLibraryRequested { get; set; }
265+
205266
[Parameter] public EventCallback<string> LocalHistoryRestoreRequested { get; set; }
206267

207268
[Parameter] public string Profile { get; set; } = string.Empty;
208269

270+
[Parameter] public EditorSplitFeedbackViewModel? SplitFeedback { get; set; }
271+
272+
[Parameter] public EventCallback<TpsDocumentSplitMode> SplitRequested { get; set; }
273+
209274
[Parameter] public EditorStatusViewModel Status { get; set; } = new(1, 1, "Actor", 140, 0, 0, 0, "0:00", "1.0");
210275

211276
[Parameter] public string Title { get; set; } = string.Empty;

src/PrompterOne.Shared/Editor/Components/EditorStructureSidebar.razor

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -38,57 +38,6 @@
3838
</div>
3939
</div>
4040

41-
<div class="ed-sidebar-actions">
42-
<button class="ed-sidebar-action"
43-
data-testid="@UiTestIds.Editor.SplitTopLevel"
44-
type="button"
45-
@onclick="() => OnSplitRequested.InvokeAsync(TpsDocumentSplitMode.TopLevelHeading)">@Text(UiTextKey.EditorSplitTopLevel)</button>
46-
<button class="ed-sidebar-action"
47-
data-testid="@UiTestIds.Editor.SplitSegment"
48-
type="button"
49-
@onclick="() => OnSplitRequested.InvokeAsync(TpsDocumentSplitMode.SegmentHeading)">@Text(UiTextKey.EditorSplitSegment)</button>
50-
</div>
51-
52-
@if (SplitFeedback is not null)
53-
{
54-
<div class="ed-sidebar-note ed-sidebar-note-split" data-testid="@UiTestIds.Editor.SplitStatus">
55-
<div class="ed-sidebar-note-head">
56-
<div>
57-
<div class="ed-sidebar-note-kicker" data-testid="@UiTestIds.Editor.SplitResultTitle">@SplitFeedback.Title</div>
58-
<div class="ed-sidebar-note-summary" data-testid="@UiTestIds.Editor.SplitResultSummary">@SplitFeedback.Summary</div>
59-
</div>
60-
<span class="ed-sidebar-note-badge" data-testid="@UiTestIds.Editor.SplitResultBadge">@SplitFeedback.HeadingBadge</span>
61-
</div>
62-
63-
<p class="ed-sidebar-note-copy" data-testid="@UiTestIds.Editor.SplitResultLibrary">@SplitFeedback.DestinationNote</p>
64-
<p class="ed-sidebar-note-copy ed-sidebar-note-copy-muted" data-testid="@UiTestIds.Editor.SplitResultCurrentDraft">@SplitFeedback.DraftNote</p>
65-
66-
@if (SplitFeedback.CreatedTitles.Count > 0)
67-
{
68-
<div class="ed-sidebar-note-list" data-testid="@UiTestIds.Editor.SplitResultList">
69-
@for (var index = 0; index < SplitFeedback.CreatedTitles.Count; index++)
70-
{
71-
<div class="ed-sidebar-note-item" data-testid="@UiTestIds.Editor.SplitResultItem(index)">
72-
<span class="ed-sidebar-note-item-index">@($"{index + 1:00}")</span>
73-
<span class="ed-sidebar-note-item-title">@SplitFeedback.CreatedTitles[index]</span>
74-
</div>
75-
}
76-
</div>
77-
}
78-
79-
@if (SplitFeedback.AdditionalCount > 0)
80-
{
81-
<div class="ed-sidebar-note-more" data-testid="@UiTestIds.Editor.SplitResultMore">@Format(UiTextKey.EditorSplitMoreInLibraryFormat, SplitFeedback.AdditionalCount)</div>
82-
}
83-
84-
<button class="ed-sidebar-note-link"
85-
data-testid="@UiTestIds.Editor.SplitResultOpenLibrary"
86-
type="button"
87-
@onclick="() => OnOpenLibraryRequested.InvokeAsync()">
88-
@SplitFeedback.OpenLibraryLabel
89-
</button>
90-
</div>
91-
}
9241
</div>
9342

9443
@code {
@@ -98,16 +47,8 @@
9847

9948
[Parameter] public EventCallback<EditorNavigationTarget> OnNavigate { get; set; }
10049

101-
[Parameter] public EventCallback OnOpenLibraryRequested { get; set; }
102-
103-
[Parameter] public EventCallback<TpsDocumentSplitMode> OnSplitRequested { get; set; }
104-
10550
[Parameter] public IReadOnlyList<EditorOutlineSegmentViewModel> Segments { get; set; } = [];
10651

107-
[Parameter] public EditorSplitFeedbackViewModel? SplitFeedback { get; set; }
108-
109-
private string Format(UiTextKey key, params object[] args) => Localizer[key.ToString(), args];
110-
11152
private static string GetEmotionClass(EditorOutlineSegmentViewModel segment) =>
11253
segment.EmotionKey switch
11354
{

src/PrompterOne.Shared/Editor/Pages/EditorPage.razor

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@
1717
<EditorStructureSidebar Segments="@_segments"
1818
ActiveSegmentIndex="@_activeSegmentIndex"
1919
ActiveBlockIndex="@_activeBlockIndex"
20-
OnNavigate="OnNavigateAsync"
21-
OnOpenLibraryRequested="OnOpenLibraryRequested"
22-
OnSplitRequested="OnSplitRequestedAsync"
23-
SplitFeedback="@_splitFeedback" />
20+
OnNavigate="OnNavigateAsync" />
2421

2522
<EditorSourcePanel @ref="_sourcePanel"
2623
Text="@_sourceText"
@@ -53,6 +50,7 @@
5350
AutoSaveEnabled="@_fileStorageSettings.FileAutoSaveEnabled"
5451
LastLocalSaveAt="@_lastLocalSaveAt"
5552
LocalHistory="@_localHistory"
53+
SplitFeedback="@_splitFeedback"
5654
ProfileChanged="OnProfileChangedAsync"
5755
TitleChanged="OnTitleChangedAsync"
5856
BaseWpmChanged="OnBaseWpmChangedAsync"
@@ -65,6 +63,8 @@
6563
CreatedDateChanged="OnCreatedDateChangedAsync"
6664
VersionChanged="OnVersionChangedAsync"
6765
LocalHistoryRestoreRequested="OnLocalHistoryRestoreRequestedAsync"
66+
OpenLibraryRequested="OnOpenLibraryRequested"
67+
SplitRequested="OnSplitRequestedAsync"
6868
IsCollapsed="@_isMetadataRailCollapsed"
6969
ToggleLabel="@GetMetadataRailToggleLabel()"
7070
ToggleRequested="OnMetadataRailToggleAsync" />

src/PrompterOne.Shared/Localization/SharedResource.de.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,4 +1017,16 @@
10171017
<data name="EditorFindResultsFormat" xml:space="preserve">
10181018
<value>{0} / {1}</value>
10191019
</data>
1020+
<data name="EditorMetadataSplitSection" xml:space="preserve">
1021+
<value>In neue Skripte aufteilen</value>
1022+
</data>
1023+
<data name="EditorMetadataSplitHint" xml:space="preserve">
1024+
<value>Erstelle aus Überschriften im aktuellen Entwurf separate Skripte.</value>
1025+
</data>
1026+
<data name="EditorSplitTopLevel" xml:space="preserve">
1027+
<value>Neue Skripte aus #-Überschriften</value>
1028+
</data>
1029+
<data name="EditorSplitSegment" xml:space="preserve">
1030+
<value>Neue Skripte aus ##-Überschriften</value>
1031+
</data>
10201032
</root>

src/PrompterOne.Shared/Localization/SharedResource.es.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,4 +1017,16 @@
10171017
<data name="EditorFindResultsFormat" xml:space="preserve">
10181018
<value>{0} / {1}</value>
10191019
</data>
1020+
<data name="EditorMetadataSplitSection" xml:space="preserve">
1021+
<value>Dividir en nuevos guiones</value>
1022+
</data>
1023+
<data name="EditorMetadataSplitHint" xml:space="preserve">
1024+
<value>Crea guiones separados a partir de los encabezados del borrador actual.</value>
1025+
</data>
1026+
<data name="EditorSplitTopLevel" xml:space="preserve">
1027+
<value>Nuevos guiones desde encabezados #</value>
1028+
</data>
1029+
<data name="EditorSplitSegment" xml:space="preserve">
1030+
<value>Nuevos guiones desde encabezados ##</value>
1031+
</data>
10201032
</root>

src/PrompterOne.Shared/Localization/SharedResource.fr.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,4 +1017,16 @@
10171017
<data name="EditorFindResultsFormat" xml:space="preserve">
10181018
<value>{0} / {1}</value>
10191019
</data>
1020+
<data name="EditorMetadataSplitSection" xml:space="preserve">
1021+
<value>Découper en nouveaux scripts</value>
1022+
</data>
1023+
<data name="EditorMetadataSplitHint" xml:space="preserve">
1024+
<value>Créez des scripts séparés à partir des titres du brouillon actuel.</value>
1025+
</data>
1026+
<data name="EditorSplitTopLevel" xml:space="preserve">
1027+
<value>Nouveaux scripts depuis les titres #</value>
1028+
</data>
1029+
<data name="EditorSplitSegment" xml:space="preserve">
1030+
<value>Nouveaux scripts depuis les titres ##</value>
1031+
</data>
10201032
</root>

src/PrompterOne.Shared/Localization/SharedResource.it.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,4 +617,16 @@
617617
<data name="EditorFindClose" xml:space="preserve"><value>Chiudi</value></data>
618618
<data name="EditorFindNoResults" xml:space="preserve"><value>Nessuna corrispondenza</value></data>
619619
<data name="EditorFindResultsFormat" xml:space="preserve"><value>{0} / {1}</value></data>
620+
<data name="EditorMetadataSplitSection" xml:space="preserve">
621+
<value>Dividi in nuovi script</value>
622+
</data>
623+
<data name="EditorMetadataSplitHint" xml:space="preserve">
624+
<value>Crea script separati a partire dalle intestazioni della bozza corrente.</value>
625+
</data>
626+
<data name="EditorSplitTopLevel" xml:space="preserve">
627+
<value>Nuovi script dalle intestazioni #</value>
628+
</data>
629+
<data name="EditorSplitSegment" xml:space="preserve">
630+
<value>Nuovi script dalle intestazioni ##</value>
631+
</data>
620632
</root>

src/PrompterOne.Shared/Localization/SharedResource.pt.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,4 +795,16 @@
795795
<data name="EditorFindResultsFormat" xml:space="preserve">
796796
<value>{0} / {1}</value>
797797
</data>
798+
<data name="EditorMetadataSplitSection" xml:space="preserve">
799+
<value>Dividir em novos roteiros</value>
800+
</data>
801+
<data name="EditorMetadataSplitHint" xml:space="preserve">
802+
<value>Crie roteiros separados a partir dos títulos no rascunho atual.</value>
803+
</data>
804+
<data name="EditorSplitTopLevel" xml:space="preserve">
805+
<value>Novos roteiros a partir de títulos #</value>
806+
</data>
807+
<data name="EditorSplitSegment" xml:space="preserve">
808+
<value>Novos roteiros a partir de títulos ##</value>
809+
</data>
798810
</root>

src/PrompterOne.Shared/Localization/SharedResource.resx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,12 @@
771771
<data name="EditorMetadataToggleCollapse" xml:space="preserve">
772772
<value>Collapse metadata panel</value>
773773
</data>
774+
<data name="EditorMetadataSplitSection" xml:space="preserve">
775+
<value>Split Into New Scripts</value>
776+
</data>
777+
<data name="EditorMetadataSplitHint" xml:space="preserve">
778+
<value>Create separate scripts from headings in the current draft.</value>
779+
</data>
774780
<data name="EditorStructureSection" xml:space="preserve">
775781
<value>Structure</value>
776782
</data>
@@ -781,10 +787,10 @@
781787
<value>Active Block</value>
782788
</data>
783789
<data name="EditorSplitTopLevel" xml:space="preserve">
784-
<value>Split #</value>
790+
<value>New scripts from # headings</value>
785791
</data>
786792
<data name="EditorSplitSegment" xml:space="preserve">
787-
<value>Split ##</value>
793+
<value>New scripts from ## headings</value>
788794
</data>
789795
<data name="EditorSplitMoreInLibraryFormat" xml:space="preserve">
790796
<value>+{0} more in Library</value>

src/PrompterOne.Shared/Localization/SharedResource.uk.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,4 +1032,16 @@
10321032
<data name="EditorFindResultsFormat" xml:space="preserve">
10331033
<value>{0} / {1}</value>
10341034
</data>
1035+
<data name="EditorMetadataSplitSection" xml:space="preserve">
1036+
<value>Розділити на нові скрипти</value>
1037+
</data>
1038+
<data name="EditorMetadataSplitHint" xml:space="preserve">
1039+
<value>Створюйте окремі скрипти з заголовків у поточній чернетці.</value>
1040+
</data>
1041+
<data name="EditorSplitTopLevel" xml:space="preserve">
1042+
<value>Нові скрипти з заголовків #</value>
1043+
</data>
1044+
<data name="EditorSplitSegment" xml:space="preserve">
1045+
<value>Нові скрипти з заголовків ##</value>
1046+
</data>
10351047
</root>

0 commit comments

Comments
 (0)