summaryrefslogtreecommitdiffstats
path: root/src/Pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/Pages')
-rw-r--r--src/Pages/Index.cshtml105
-rw-r--r--src/Pages/Index.cshtml.cs34
-rw-r--r--src/Pages/Read.cshtml50
-rw-r--r--src/Pages/Read.cshtml.cs24
4 files changed, 116 insertions, 97 deletions
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 &copy; @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 &copy; @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