From 5d89f8a8d55c49d766e363ad15d53e7ad224e47c Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Thu, 27 Mar 2025 19:20:15 +1100
Subject: sidebar: package news module
---
src/modules/sidebar/index.tsx | 3 +-
src/modules/sidebar/modules/news.tsx | 110 +++++++++++++++++++++++++++++++
src/modules/sidebar/modules/upcoming.tsx | 2 +-
src/modules/sidebar/packages.tsx | 9 +++
4 files changed, 122 insertions(+), 2 deletions(-)
create mode 100644 src/modules/sidebar/modules/news.tsx
create mode 100644 src/modules/sidebar/packages.tsx
(limited to 'src/modules')
diff --git a/src/modules/sidebar/index.tsx b/src/modules/sidebar/index.tsx
index 5ae7670..d4c1855 100644
--- a/src/modules/sidebar/index.tsx
+++ b/src/modules/sidebar/index.tsx
@@ -6,6 +6,7 @@ import Audio from "./audio";
import Connectivity from "./connectivity";
import Dashboard from "./dashboard";
import NotifPane from "./notifpane";
+import Packages from "./packages";
@register()
export default class SideBar extends Widget.Window {
@@ -22,7 +23,7 @@ export default class SideBar extends Widget.Window {
visible: false,
});
- const panes = [, , , ];
+ const panes = [, , , , ];
this.shown = Variable(panes[0].name);
this.add(
diff --git a/src/modules/sidebar/modules/news.tsx b/src/modules/sidebar/modules/news.tsx
new file mode 100644
index 0000000..f3be53e
--- /dev/null
+++ b/src/modules/sidebar/modules/news.tsx
@@ -0,0 +1,110 @@
+import Palette from "@/services/palette";
+import Updates from "@/services/updates";
+import { setupCustomTooltip } from "@/utils/widgets";
+import { bind, Variable } from "astal";
+import { Gtk } from "astal/gtk3";
+
+const countNews = (news: string) => news.match(/^([0-9]{4}-[0-9]{2}-[0-9]{2} .+)$/gm)?.length ?? 0;
+
+const News = ({ header, body }: { header: string; body: string }) => {
+ const expanded = Variable(false);
+
+ body = body
+ .slice(0, -5) // Remove last unopened \x1b[0m
+ .replaceAll("\x1b[0m", ""); // Replace reset code with end span
+
+ return (
+
+
+
+
+
+ );
+};
+
+const List = () => (
+
+ {bind(Updates.get_default(), "news").as(n => {
+ const children = [];
+ const news = n.split(/^([0-9]{4}-[0-9]{2}-[0-9]{2} .+)$/gm);
+ for (let i = 1; i < news.length - 1; i += 2)
+ children.push();
+ return children;
+ })}
+
+);
+
+const NoNews = () => (
+
+
+
+
+
+
+);
+
+export default () => (
+
+
+
+ (n ? "list" : "empty"))}
+ >
+
+ !!n)}
+ hscroll={Gtk.PolicyType.NEVER}
+ name="list"
+ >
+
+
+
+
+);
diff --git a/src/modules/sidebar/modules/upcoming.tsx b/src/modules/sidebar/modules/upcoming.tsx
index 76dea56..816dff8 100644
--- a/src/modules/sidebar/modules/upcoming.tsx
+++ b/src/modules/sidebar/modules/upcoming.tsx
@@ -82,7 +82,7 @@ export default () => (
sensitive={bind(Calendar.get_default(), "loading").as(l => !l)}
cursor="pointer"
onClicked={() => Calendar.get_default().updateCalendars().catch(console.error)}
- label=" Reload"
+ label={bind(Calendar.get_default(), "loading").as(l => (l ? " Loading" : " Reload"))}
/>
(
+
+
+
+
+);
--
cgit v1.2.3-freya