diff options
Diffstat (limited to 'src/Pages')
| -rw-r--r-- | src/Pages/About.cshtml | 15 | ||||
| -rw-r--r-- | src/Pages/About.cshtml.cs | 10 | ||||
| -rw-r--r-- | src/Pages/Index.cshtml | 105 | ||||
| -rw-r--r-- | src/Pages/Index.cshtml.cs | 34 | ||||
| -rw-r--r-- | src/Pages/Read.cshtml | 50 | ||||
| -rw-r--r-- | src/Pages/Read.cshtml.cs | 24 | ||||
| -rw-r--r-- | src/Pages/Shared/_Layout.cshtml | 20 |
7 files changed, 157 insertions, 101 deletions
diff --git a/src/Pages/About.cshtml b/src/Pages/About.cshtml new file mode 100644 index 0000000..766c2a4 --- /dev/null +++ b/src/Pages/About.cshtml @@ -0,0 +1,15 @@ +@page "/om" +@model I2R.LightNews.Pages.About + +@{ + ViewData["Title"] = "Om"; +} + +<p>Lettnytt viser deg forenklet versjon av norske nettaviser.</p> +<p>Noen artikler kan også leses forenklet.</p> +<p>Her er en ikke-komplett liste over inngrep:</p> +<ul> + <li>Fjerner bilder, videoer og svakt relevante lenker (reklame) til andre artikler.</li> + <li>For nrk.no: Fjerner lenker til /mat, /radio og /tv</li> +</ul> +<p>E-postadresse: lettnytt@oiee.no</p>
\ No newline at end of file diff --git a/src/Pages/About.cshtml.cs b/src/Pages/About.cshtml.cs new file mode 100644 index 0000000..b30cd51 --- /dev/null +++ b/src/Pages/About.cshtml.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace I2R.LightNews.Pages; + +public class About : PageModel +{ + public void OnGet() { + + } +}
\ No newline at end of file diff --git a/src/Pages/Index.cshtml b/src/Pages/Index.cshtml index f01b263..0501e3e 100644 --- a/src/Pages/Index.cshtml +++ b/src/Pages/Index.cshtml @@ -1,21 +1,94 @@ @page "{site?}" @model IndexModel @{ - ViewData["Title"] = Model.Source.Name; + ViewData["Title"] = Model.PageTitle; } +@if (Model.FrontPage != default) { + foreach (var article in Model.FrontPage.Articles) { + <section class="news-link"> + <a href="/@Model.FrontPage.Name?url=@article.Href"> + <h2>@Html.Raw(article.Title)</h2> + </a> + <div class="bar"> + <div class="from-the-left"> + <button class="reset link" onclick="hide_article(this)">Gjem</button> | + </div> + <div class="from-the-right"> + <a href="@article.Href" class="source-link" rel="noreferrer">Les på nrk.no</a> + </div> + </div> + </section> + } + <footer> + <p> + <small> + @Model.FrontPage.Attribution © @Model.FrontPage.Name, @(DateTime.UtcNow.Subtract(Model.FrontPage.Created).Minutes) minutter siden + </small> + </p> + </footer> + @section scripts { + <script> + const ignoreSessionStorageKey = "frontpage_ignores"; + function hide_article(el) { + const linkEl = el.closest(".news-link"); + const ignoreLink = new URL(linkEl.querySelector("a").href).searchParams.get("url"); + const currentIgnores = sessionStorage.getItem(ignoreSessionStorageKey); + let newIgnores = []; + if (currentIgnores) newIgnores = JSON.parse(currentIgnores); + newIgnores.push(ignoreLink) + sessionStorage.setItem(ignoreSessionStorageKey, JSON.stringify(newIgnores)); + linkEl.remove() + } + + const ignores = sessionStorage.getItem(ignoreSessionStorageKey) + if (ignores) { + for (const ignore of JSON.parse(ignores)) { + console.log(ignore) + document.querySelector("a[href*='"+ignore+"']").closest(".news-link").remove(); + } + } + </script> + } + } else if (Model.Article != default) { + <div id="art-header" style="display: flex; justify-content: space-between"> + <div> + <h1>@Model.Article.Title</h1> + <p>@Model.Article.Subtitle</p> + </div> + </div> -@foreach (var article in Model.Source.Articles) { - <section class="news-link"> - <a href="/les/@Model.Source.Name?url=@article.Href"> - <h2>@Html.Raw(article.Title)</h2> - </a> - <a href="@article.Href" class="source-link" rel="noreferrer">Les på nrk.no</a> - </section> -} -<footer> - <p> - <small> - @Model.Source.Attribution © @Model.Source.Name, @(DateTime.UtcNow.Subtract(Model.Source.Created).Minutes) minutter siden - </small> - </p> -</footer>
\ No newline at end of file + <article id="art-body"> + @Html.Raw(Model.Article.Content) + </article> + + <footer> + <div style="flex-direction:column"> + @foreach (var author in Model.Article.Authors) { + <small style="white-space: nowrap"><b>@author.Name</b>: @author.Title</small> + <br/> + } + </div> + <div style="flex-direction: column"> + @if (Model.Article.PublishedAt != default) { + <small style="white-space: nowrap">Publisert: @Model.Article.PublishedAt.ToString("dd-MM-yyyy hh:mm:ss")</small> + } + @if (Model.Article.UpdatedAt != default) { + <br/> + <small style="white-space: nowrap">Oppdatert: @Model.Article.UpdatedAt.ToString("dd-MM-yyyy hh:mm:ss")</small> + } + <br/> + <small> + <a href="@Model.Article.Href" no-interception>Les på nrk.no</a> + </small> + </div> + </footer> + +@section scripts { + <script> + document.addEventListener("DOMContentLoaded", () => { + document.querySelectorAll("a:not([no-interception])").forEach(el => { + if (el.href.indexOf("nrk.no") !== -1) el.href = "/nrk?url=" + el.href; + }); + }) + </script> +}}
\ No newline at end of file diff --git a/src/Pages/Index.cshtml.cs b/src/Pages/Index.cshtml.cs index 80b0ed0..666c75e 100644 --- a/src/Pages/Index.cshtml.cs +++ b/src/Pages/Index.cshtml.cs @@ -13,16 +13,36 @@ public class IndexModel : PageModel _grabber = grabber; } - public NewsSource Source { get; set; } + public NewsSource FrontPage { get; set; } + public NewsArticle Article { get; set; } + public string PageTitle { get; set; } - public async Task<ActionResult> OnGet(string site) { - Source = site switch { - "nrk" => await _grabber.GrabNrkAsync(), - _ => default + public async Task<ActionResult> OnGet([FromRoute] string site, [FromQuery] string url = default) { + PageTitle = site switch { + "nrk" => "NRK", + _ => "" }; - if (Source == default) { - return Redirect("/nrk"); + if (url.IsNullOrWhiteSpace()) { + FrontPage = site switch { + "nrk" => await _grabber.GrabNrkAsync(), + _ => default + }; + + if (FrontPage == default) { + return Redirect("/nrk"); + } + } else { + Article = site switch { + "nrk" => await _grabber.GrabNrkArticleAsync(url), + _ => default + }; + + if (Article == default) { + return Redirect(url); + } + + PageTitle = PageTitle + " - " + Article.Title; } return Page(); diff --git a/src/Pages/Read.cshtml b/src/Pages/Read.cshtml deleted file mode 100644 index 9cff853..0000000 --- a/src/Pages/Read.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@page "/les/{site}" -@model ReadModel -@{ - ViewData["Title"] = Model.Source.Title; -} - -<div id="art-header" style="display: flex; justify-content: space-between"> - <div> - <h1>@Model.Source.Title</h1> - <p>@Model.Source.Subtitle</p> - </div> -</div> - -<article id="art-body"> - @Html.Raw(Model.Source.Content) -</article> - -<footer> - <p> - <div style="display: flex; flex-direction: column; flex-wrap: nowrap;"> - <div style="flex-direction:column"> - @foreach (var author in Model.Source.Authors) { - <small style="white-space: nowrap"><b>@author.Name</b>: @author.Title</small> - <br/> - } - </div> - <div style="flex-direction: column"> - @if (Model.Source.PublishedAt != default) { - <small style="white-space: nowrap">Publisert: @Model.Source.PublishedAt.ToString("dd-MM-yyyy hh:mm:ss")</small> - } - @if (Model.Source.UpdatedAt != default) { - <br/> - <small style="white-space: nowrap">Oppdatert: @Model.Source.UpdatedAt.ToString("dd-MM-yyyy hh:mm:ss")</small> - } - <br/> - <small> - <a href="@Model.Source.Href" no-interception>Les på nrk.no</a> - </small> - </div> - </div> - </p> -</footer> - -<script> -document.addEventListener("DOMContentLoaded", () => { - document.querySelectorAll("a:not([no-interception])").forEach(el => { - if (el.href.indexOf("nrk.no") !== -1) el.href = "/les/nrk?url=" + el.href; - }); -}) -</script>
\ No newline at end of file diff --git a/src/Pages/Read.cshtml.cs b/src/Pages/Read.cshtml.cs deleted file mode 100644 index 1a13ec0..0000000 --- a/src/Pages/Read.cshtml.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace I2R.LightNews.Pages; - -public class ReadModel : PageModel -{ - private readonly GrabberService _grabber; - - public NewsArticle Source { get; set; } - - public ReadModel(GrabberService grabber) { - _grabber = grabber; - } - - public async Task<ActionResult> OnGet([FromRoute] string site, [FromQuery] string url) { - Source = site switch { - "nrk" => await _grabber.GrabNrkArticleAsync(url), - _ => default - }; - if (Source == default) return Redirect(url); - return Page(); - } -}
\ No newline at end of file diff --git a/src/Pages/Shared/_Layout.cshtml b/src/Pages/Shared/_Layout.cshtml index 09babeb..c3ca817 100644 --- a/src/Pages/Shared/_Layout.cshtml +++ b/src/Pages/Shared/_Layout.cshtml @@ -4,17 +4,29 @@ <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <link rel="stylesheet" href="/index.css"> + @await RenderSectionAsync("head", false) <title>@ViewData["Title"] - Lettnytt</title> </head> <body> -<header> - <nav style="display: flex; flex-direction: row; gap: 0 15px"> - <a href="/nrk" style="color: @(Path.StartsWith("/nrk") ? "black" : "blue")">NRK</a> - <a href="/dagbladet" style="color: @(Path.StartsWith("/dagbladet") ? "black" : "blue")">Dagbladet</a> +<header id="top-bar"> + <nav> + <div class="left"> + <a href="/nrk" class="@(Context.Request.Path.StartsWithSegments("/nrk") ? "active" : "")">NRK</a> + <a href="/dagbladet" class="@(Context.Request.Path.StartsWithSegments("/dagbladet") ? "active" : "")">Dagbladet</a> + <a href="/aftenposten" class="@(Context.Request.Path.StartsWithSegments("/aftenposten") ? "active" : "")">Aftenposten</a> + <a href="/vg" class="@(Context.Request.Path.StartsWithSegments("/vg") ? "active" : "")">VG</a> + <a href="/dn" class="@(Context.Request.Path.StartsWithSegments("/dn") ? "active" : "")">DN</a> + <a href="/e24" class="@(Context.Request.Path.StartsWithSegments("/e24") ? "active" : "")">E24</a> + <a href="/kode24" class="@(Context.Request.Path.StartsWithSegments("/kode24") ? "active" : "")">Kode 24</a> + </div> + <div class="right"> + <a href="/om" class="@(Context.Request.Path.StartsWithSegments("/om") ? "active" : "")">Om lettnytt</a> + </div> </nav> </header> <main> @RenderBody() </main> +@await RenderSectionAsync("scripts", false) </body> </html>
\ No newline at end of file |
