From 2a14bf1f41b3b97d9c06b1b279216da1127dc64d Mon Sep 17 00:00:00 2001 From: Lynne Date: Wed, 16 Sep 2020 11:43:55 +1000 Subject: [PATCH] basic UI layout and style --- .vscode/tasks.json | 6 +- Models/Document.cs | 3 + Models/SeedData.cs | 13 ++- Pages/Index.cshtml | 82 +++++--------- Pages/Shared/_Layout.cshtml | 22 ++++ Pages/_ViewStart.cshtml | 3 + Startup.cs | 7 +- .../CommaSeparatedList.cshtml | 14 +++ Views/Shared/DisplayTemplates/FileSize.cshtml | 15 +++ snootalogue.csproj | 2 + wwwroot/css/style.css | 104 ++++++++++++++++++ wwwroot/img/placeholder.png | Bin 0 -> 9451 bytes wwwroot/img/placeholder.xcf | Bin 0 -> 12385 bytes 13 files changed, 210 insertions(+), 61 deletions(-) create mode 100644 Pages/Shared/_Layout.cshtml create mode 100644 Pages/_ViewStart.cshtml create mode 100644 Views/Shared/DisplayTemplates/CommaSeparatedList.cshtml create mode 100644 Views/Shared/DisplayTemplates/FileSize.cshtml create mode 100644 wwwroot/css/style.css create mode 100644 wwwroot/img/placeholder.png create mode 100644 wwwroot/img/placeholder.xcf diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e4b5498..b0ec85e 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -36,7 +36,11 @@ "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], - "problemMatcher": "$msCompile" + "problemMatcher": "$msCompile", + "group": { + "kind": "build", + "isDefault": true + } } ] } diff --git a/Models/Document.cs b/Models/Document.cs index c789041..722c491 100644 --- a/Models/Document.cs +++ b/Models/Document.cs @@ -8,13 +8,16 @@ namespace Snootalogue.Models { public int ID { get; set; } public string Filename { get; set; } public string Hash { get; set; } + [UIHint("FileSize")] public long Size { get; set; } public string Title { get; set; } + [UIHint("CommaSeparatedList")] public List Authors { get; set; } public string Category { get; set; } [Display(Name = "Release Date")] public DateTime DateAdded { get; set; } + [UIHint("CommaSeparatedList")] public List Tags { get; set; } public Boolean Read { get; set; } } diff --git a/Models/SeedData.cs b/Models/SeedData.cs index 52c7d96..00d9095 100644 --- a/Models/SeedData.cs +++ b/Models/SeedData.cs @@ -20,10 +20,11 @@ namespace Snootalogue.Models { new Document { Title = "The Peebler Chronicles", Filename = "peebler.pdf", - Size = 5 * 1024 * 1024, + Size = Convert.ToInt64(0.5 * 1024 * 1024), DateAdded = DateTime.UtcNow, Authors = new List() { "Pempos", "Artep" }, - Category = "News" + Category = "News", + Hash = "0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0" }, new Document { Title = "Smooched by a Wifeoid", @@ -32,15 +33,17 @@ namespace Snootalogue.Models { DateAdded = DateTime.UtcNow, Authors = new List() { "Lynne", "Petra" }, Category = "Romance", - Read = true + Read = true, + Hash = "0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0" }, new Document { Title = "What on Boo Earth? My Girlfriend can Walk on the Ceiling?!", Filename = "ceiling_gf.pdf", - Size = 22 * 1024 * 1024, + Size = Convert.ToInt64(22.5 * 1024 * 1024), DateAdded = DateTime.UtcNow, Authors = new List() { "Lynne" }, - Category = "Romance" + Category = "Romance", + Hash = "0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0" } ); diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml index 3057cad..0ef4627 100644 --- a/Pages/Index.cshtml +++ b/Pages/Index.cshtml @@ -1,58 +1,32 @@ @page @model Snootalogue.Pages.IndexModel +@{ + ViewData["Title"] = "Home"; +} -

Documents

+@*

Documents

*@ +
+ @foreach (var item in Model.Documents) { +
+
+
+
@Html.DisplayFor(modelItem => item.Title)
+
By @Html.DisplayFor(modelItem => item.Authors)
+
Category: @Html.DisplayFor(modelItem => item.Category)
+
@Html.DisplayFor(modelItem => item.Tags)
+ @{string hash = item.Hash.Substring(0, 8);} + +
+
+ @* TODO: replace these with font awesome or something *@ +
+ View + Details + Edit + Delete +
+
- - - - - @* *@ - - - - - - - - - @foreach (var item in Model.Documents) { - - - - - - - - - } - - - -
- @Html.DisplayNameFor(model => model.Documents[0].Title) - - @Html.DisplayNameFor(model => model.Documents[0].Authors) - - @Html.DisplayNameFor(model => model.Documents[0].Category) - - @Html.DisplayNameFor(model => model.Documents[0].Size) - - @Html.DisplayNameFor(model => model.Documents[0].Read) - - @Html.DisplayNameFor(model => model.Documents[0].DateAdded) -
- @Html.DisplayFor(modelItem => item.Title) - - @Html.DisplayFor(modelItem => item.Category) - - @Html.DisplayFor(modelItem => item.Size) - - @Html.DisplayFor(modelItem => item.Read) - - @Html.DisplayFor(modelItem => item.DateAdded) - - Details - Edit - Delete -
+
+ } +
diff --git a/Pages/Shared/_Layout.cshtml b/Pages/Shared/_Layout.cshtml new file mode 100644 index 0000000..e967518 --- /dev/null +++ b/Pages/Shared/_Layout.cshtml @@ -0,0 +1,22 @@ + + + + + + + @ViewData["Title"] | Snootalogue + + + + + + +
+ @RenderBody() +
+ + + diff --git a/Pages/_ViewStart.cshtml b/Pages/_ViewStart.cshtml new file mode 100644 index 0000000..e1b65b4 --- /dev/null +++ b/Pages/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/Startup.cs b/Startup.cs index 473e237..08a164c 100644 --- a/Startup.cs +++ b/Startup.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Westwind.AspNetCore.LiveReload; using Snootalogue.Data; namespace Snootalogue { @@ -17,7 +18,8 @@ namespace Snootalogue { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { - services.AddRazorPages(); + services.AddLiveReload(); + services.AddRazorPages().AddRazorRuntimeCompilation(); services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("SnootalogueContext")) ); @@ -25,10 +27,13 @@ namespace Snootalogue { // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + app.UseLiveReload(); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } + app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { diff --git a/Views/Shared/DisplayTemplates/CommaSeparatedList.cshtml b/Views/Shared/DisplayTemplates/CommaSeparatedList.cshtml new file mode 100644 index 0000000..b94c498 --- /dev/null +++ b/Views/Shared/DisplayTemplates/CommaSeparatedList.cshtml @@ -0,0 +1,14 @@ +@using System.Text; +@model List + +@{ + if (@Model == null || @Model.Count == 0) { + + } else { + var sb = new StringBuilder(); + foreach(var item in @Model) { + sb.AppendFormat("{0}, ", item); + } + @sb.ToString().Substring(0, sb.Length - 2) + } +} diff --git a/Views/Shared/DisplayTemplates/FileSize.cshtml b/Views/Shared/DisplayTemplates/FileSize.cshtml new file mode 100644 index 0000000..c909799 --- /dev/null +++ b/Views/Shared/DisplayTemplates/FileSize.cshtml @@ -0,0 +1,15 @@ +@model long + +@{ + string[] suffixes = {"", "K", "M", "G", "T", "P"}; + double x = @Model; + int i = 0; + while (x > 1024) { + x = x / 1024.0; + i++; + } + if (i == 0){ + @x bytes + } else { + @x @suffixes[i]iB + }} diff --git a/snootalogue.csproj b/snootalogue.csproj index 255ee78..c2cb0d3 100644 --- a/snootalogue.csproj +++ b/snootalogue.csproj @@ -5,6 +5,7 @@ + @@ -15,6 +16,7 @@ + diff --git a/wwwroot/css/style.css b/wwwroot/css/style.css new file mode 100644 index 0000000..65d33a2 --- /dev/null +++ b/wwwroot/css/style.css @@ -0,0 +1,104 @@ +body { + font-family: sans-serif; + margin: 0; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 200; +} + +a.simple { + text-decoration: none; +} + +.vertical-buttons { + display: flex; + flex-direction: column; +} +.vertical-buttons a.button { + flex: 1; + color: #a66; + background: white; + border: thin #a66 solid; + border-bottom: none; + padding: 5px; + text-align: center; + transition: 0.2s all; +} +.vertical-buttons a.button:hover { + background: #a66; + color: white; +} +.vertical-buttons a.button:first-child { + border-radius: 5px 5px 0 0; +} +.vertical-buttons a.button:last-child { + border-bottom: thin #a66 solid; + border-radius: 0 0 5px 5px; +} + +nav { + padding: 20px 15px; + background: #a00; + color: white; + display: flex; + justify-content: space-between; +} +#nav-links { + font-size: 1.4em; +} +#nav-links, #nav-search { + margin: auto 0; +} + +main { + padding: 20px; +} + +.documents { + display: flex; + flex-direction: column; +} +.document { + display: flex; + flex: 1; + flex-direction: row; + margin: 10px; +} + +.document-column { + width: 10%; +} +.document-column.left { + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} +.document-column.centre { + width: 80%; +} +.document-column.right ul { + list-style: none; + padding: 0; +} +.document-column.centre div { + margin: 3px 0; +} +.document-column .title { + font-size: 1.2em; + text-align: center; +} +.document-column .authors { + text-align: center; +} +.document-column .tags { + font-size: 0.8em; +} +.document-column .tags .list-empty::before { + display: inline-block; + content: "No tags"; +} +.document-column .metadata { + font-size: 0.8em; + color: #888; +} diff --git a/wwwroot/img/placeholder.png b/wwwroot/img/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..44842e4744eb6449ee3cdf99e1fb7015eba8811b GIT binary patch literal 9451 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 vnvJu4e>M#K_o%&U^#23R|E~!AJ(dja~-`?G4 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 literal 0 HcmV?d00001