diff options
Diffstat (limited to 'Pages')
| -rw-r--r-- | Pages/Component/MediaTagTable.razor | 7 | ||||
| -rw-r--r-- | Pages/Component/Switch.razor | 15 | ||||
| -rw-r--r-- | Pages/Component/Switch.razor.css | 25 | ||||
| -rw-r--r-- | Pages/TagDefinitions.razor | 54 | ||||
| -rw-r--r-- | Pages/TagDefinitions.razor.css | 4 | ||||
| -rw-r--r-- | Pages/ViewMedia.razor | 97 | ||||
| -rw-r--r-- | Pages/ViewMedia.razor.css | 2 |
7 files changed, 149 insertions, 55 deletions
diff --git a/Pages/Component/MediaTagTable.razor b/Pages/Component/MediaTagTable.razor index 278304d..ce42e48 100644 --- a/Pages/Component/MediaTagTable.razor +++ b/Pages/Component/MediaTagTable.razor @@ -28,6 +28,8 @@ <td> @if(!e.isImplicit) { <a href="javascript:;" @onclick=@(() => Delete(e.tagDef))>Delete</a> + } else { + <a href="javascript:;" @onclick=@(() => MakeExplicit(e.tagDef))>Make Explicit</a> } </td> </tr> @@ -60,4 +62,9 @@ .Where(e => e.tagDefinition.Source == TagSource.UserTag) .ToArray(); } + + private void MakeExplicit(TagDefinition tagDef) { + tagService.AddTag(Media, tagDef); + Refresh(); + } } diff --git a/Pages/Component/Switch.razor b/Pages/Component/Switch.razor new file mode 100644 index 0000000..ffb3543 --- /dev/null +++ b/Pages/Component/Switch.razor @@ -0,0 +1,15 @@ +<link rel="stylesheet" href="@(nameof(HyperBooru)).styles.css"/> + +<label> + <input + type="checkbox" + @onchange=@(e => OnToggle.InvokeAsync((e.Value as bool?) ?? false)) + hidden/> + <div class="switch-outer"> + <div class="switch-inner"/> + </div> +</label> + +@code { + public EventCallback<bool> OnToggle { get; set; } +} diff --git a/Pages/Component/Switch.razor.css b/Pages/Component/Switch.razor.css new file mode 100644 index 0000000..6b1f5d5 --- /dev/null +++ b/Pages/Component/Switch.razor.css @@ -0,0 +1,25 @@ +div.switch-outer { + background: var(--col-switch-bg); + border-radius: 20px; + border: 1px solid var(--col-switch-fg); + cursor: pointer; + height: 20px; + transition: background 0.1s linear; + width: 40px; +} + +div.switch-inner { + background: var(--col-switch-fg); + border-radius: 20px; + height: 20px; + transition: margin-left 0.1s linear; + width: 20px; +} + +input:checked + div.switch-outer { + background: var(--col-switch-bg-hl); +} + +input:checked + div.switch-outer > div.switch-inner { + margin-left: 20px; +} diff --git a/Pages/TagDefinitions.razor b/Pages/TagDefinitions.razor index cb0a17c..a9e1ebe 100644 --- a/Pages/TagDefinitions.razor +++ b/Pages/TagDefinitions.razor @@ -6,6 +6,10 @@ <link rel="stylesheet" type="text/css" href="@(nameof(HyperBooru)).styles.css"/> +<div class="button-container"> + <button @onclick=@(() => createTagDialog.Show())>Create</button> +</div> + <table id="tag-definitions" class="data-table"> <tr> <th>Namespace</th> @@ -23,21 +27,24 @@ </i> </td> <td> + <a href="/Gallery?q=@tagDef.Name">Search</a> + <a href="javascript:;" @onclick=@(() => PromptToEdit(tagDef))>Edit</a> <a href="javascript:;" @onclick=@(() => PromptToDelete(tagDef))> Delete </a> <a href="javascript:;" @onclick=@(() => PromptImplicitTags(tagDef))> Implicit Tags </a> + @if(tagDef.ImplicitTags.Select(td => td.Guid).Contains(HBContext.NSFWTag)) { + <a href="javascript:;" @onclick=@(() => SetNsfw(tagDef, false))>Make SFW</a> + } else { + <a href="javascript:;" @onclick=@(() => SetNsfw(tagDef, true))>Make NSFW</a> + } </td> </tr> } </table> -<div class="button-container"> - <button @onclick=@(() => createTagDialog.Show())>Create</button> -</div> - <Dialog Title="Create a new tag definition" @ref=createTagDialog> <form @onsubmit=CreateTagDefinition> <label>Name</label> @@ -51,6 +58,19 @@ </form> </Dialog> +<Dialog Title="Edit tag" @ref=editTagDialog> + <form @onsubmit=EditTagDefinition> + <label>Name</label> + <input type="text" @bind=tagName required/> + <label>Namespace</label> + <input type="text" @bind=tagNamespace/> + <div class="button-container"> + <button class="secondary" @onclick=@(() => editTagDialog.Hide())>Cancel</button> + <button type="submit">Apply</button> + </div> + </form> +</Dialog> + <Dialog Title="Are you sure you want to delete this tag definition?" @ref=deleteTagDialog> <div class="button-container"> <button @onclick=@(() => deleteTagDialog.Hide()) class="secondary">Cancel</button> @@ -65,12 +85,14 @@ @code { private Dialog createTagDialog; private Dialog deleteTagDialog; + private Dialog editTagDialog; private TagSelectDialog implicitTagDialog; private string tagName; private string? tagNamespace; private TagDefinition? toDelete; + private TagDefinition? toEdit; private TagDefinition? toEditImplicit; private TagDefinition[] tagDefinitions => @@ -89,6 +111,21 @@ StateHasChanged(); } + private void PromptToEdit(TagDefinition toEdit) { + this.toEdit = toEdit; + tagName = toEdit.Name; + tagNamespace = toEdit.Namespace; + editTagDialog.Show(); + } + + private void EditTagDefinition() { + if(toEdit is null) + return; + + tagService.UpdateTagDefinition(toEdit, tagName, tagNamespace); + StateHasChanged(); + } + private void PromptToDelete(TagDefinition toDelete) { this.toDelete = toDelete; deleteTagDialog.Show(); @@ -116,4 +153,13 @@ tagService.SetImplicitTags(toEditImplicit, tagDefs); StateHasChanged(); } + + private void SetNsfw(TagDefinition tagDef, bool nsfw) { + if(nsfw) { + tagService.AddTag(tagDef.Guid, HBContext.NSFWTag); + } else { + tagService.RemoveTag(tagDef.Guid, HBContext.NSFWTag); + } + StateHasChanged(); + } } diff --git a/Pages/TagDefinitions.razor.css b/Pages/TagDefinitions.razor.css index 93001c7..933cb4f 100644 --- a/Pages/TagDefinitions.razor.css +++ b/Pages/TagDefinitions.razor.css @@ -5,8 +5,4 @@ div.button-container { display: flex; justify-content: flex-end; -} - -table#tag-definitions td:first-child { - font-family: 'Lucida Console'; }
\ No newline at end of file diff --git a/Pages/ViewMedia.razor b/Pages/ViewMedia.razor index 68cc313..e559460 100644 --- a/Pages/ViewMedia.razor +++ b/Pages/ViewMedia.razor @@ -10,51 +10,56 @@ <div id="content"> <img src="/media/@(media.Guid)"/> <div id="metadata"> - <TabContainer> - <TabPane Title="Media Info"> - <div id="metadata-fileinfo"> - <p>Title: <i>@(@media.ShortDescription ?? "None")</i></p> - <p>Description: <i>@(media.LongDescription ?? "None")</i></p> - <p id="metadata-uploadhistory">Upload history</p> - <hr /> - <table class="data-table"> - <tr> - <th>Created On</th> - <th>Last Write</th> - <th>Uploaded On</th> - <th>Filename</th> - <th>Original Checksum</th> - </tr> - @foreach(var file in media.UploadedFiles) { - <tr> - <td>@(file.CreateTime?.ToString() ?? "N/A")</td> - <td>@(file.LastWriteTime?.ToString() ?? "N/A")</td> - <td>@file.UploadTime</td> - <td>@file.Filename</td> - <td>@file.OriginalChecksum</td> - </tr> - } - </table> - <div class="button-container"> - <button @onclick=@(() => deleteDialog.Show()) class="warning">Delete</button> - <button>Apply</button> - </div> - </div> - </TabPane> - <TabPane Title="Tags"> - <div id="metadata-tags"> - <MediaTagTable Media=media @ref=mediaTagTable/> - <div class="button-container"> - <button @onclick=@(() => tagDialog.Show()) class="secondary">Add Tag</button> - @if(media.IsIngest) { - <button @onclick=@(() => SetIngest(false))>Mark Tagging Complete</button> - } else { - <button class="secondary" @onclick=@(() => SetIngest(true))>Mark Tagging Incomplete</button> - } - </div> - </div> - </TabPane> - </TabContainer> + <div id="metadata-fileinfo"> + @if(true) { + <label> + Title: + <input type="text" style="width:100%;"/> + </label> + <p>Description:</p> + <textarea/> + } else { + <p>Title: <i>@(@media.ShortDescription ?? "None")</i></p> + <p>Description: <i>@(media.LongDescription ?? "None")</i></p> + } + <p class="heading">Upload history</p> + <hr/> + <table class="data-table"> + <tr> + <th>Created On</th> + <th>Last Write</th> + <th>Uploaded On</th> + <th>Filename</th> + <th>Original Checksum</th> + </tr> + @foreach(var file in media.UploadedFiles) { + <tr> + <td>@(file.CreateTime?.ToString() ?? "N/A")</td> + <td>@(file.LastWriteTime?.ToString() ?? "N/A")</td> + <td>@file.UploadTime</td> + <td>@file.Filename</td> + <td>@file.OriginalChecksum</td> + </tr> + } + </table> + <div class="button-container"> + <button @onclick=@(() => deleteDialog.Show()) class="warning">Delete</button> + <button>Apply</button> + </div> + </div> + <div id="metadata-tags"> + <p class="heading">Tags</p> + <hr/> + <MediaTagTable Media=media @ref=mediaTagTable/> + <div class="button-container"> + <button @onclick=@(() => tagDialog.Show()) class="secondary">Add Tag</button> + @if(media.IsIngest) { + <button @onclick=@(() => SetIngest(false))>Mark Tagging Complete</button> + } else { + <button class="secondary" @onclick=@(() => SetIngest(true))>Mark Tagging Incomplete</button> + } + </div> + </div> </div> </div> @@ -105,7 +110,7 @@ private void SetIngest(bool ingest) { var ingestTag = db.TagDefinitions - .First(td => td.Source == TagSource.Internal && td.Name == "ingest"); + .First(td => td.Guid == HBContext.IngestTag); if(!ingest) media.Tags.RemoveAll(t => t.TagDefinition.Guid == ingestTag.Guid); diff --git a/Pages/ViewMedia.razor.css b/Pages/ViewMedia.razor.css index 8a59041..8a6a95a 100644 --- a/Pages/ViewMedia.razor.css +++ b/Pages/ViewMedia.razor.css @@ -24,7 +24,7 @@ div#metadata-fileinfo > table td { font-size: 8pt; } -p#metadata-uploadhistory { +p.heading { margin-top: 30px; } |
